Вычислить сумму списка переменных по группам
У меня есть таблица данных с одним ключом и около 100 числовыми строками, одна из которых установлена на ключ. Я хотел бы создать новую переменную, которая содержит суммирование каждой числовой строки, сгруппированной по ключу.
Например, мои данные сейчас
ID Count1 Count2 Count3
1 1 3 0
1 3 3 3
2 1 2 1
3 1 1 2
Я бы хотел:
ID Count1 Count2 Count3
1 4 6 3
2 1 2 1
3 1 1 2
Я пробовал так много способов получить это. Я знаю, что могу:
Y <- X[, list(Count=sum(Count1), Count2=sum(Count2), Count3=sum(Count3), by = ID]
Однако у меня есть сотни переменных, и я получаю их имена только в списке. Как мне с этим справиться?
Большое спасибо за вашу помощь.
Вот код для генерации тестовых данных:
ID <-c(rep(210, 9), rep(3917,6))
Count1 <- c(1,1,0,1,3,1,4,1,1,1,1,1,1,0,1)
Count2 <- c(1,0,0,1,0,1,0,1,1,1,1,1,1,0,1)
Count3 <- c(1,0,0,1,0,1,0,1,1,1,1,1,1,0,1)
x <- data.table(ID, Count1, Count2, Count3)
setkey(x, ID)
Ответы
Ответ 1
Ваши тестовые данные не соответствуют приведенному вами примеру, но независимо - вы можете воспользоваться тем фактом, что data.table()
имеет оператор с именем .SD
для "подмножества данных". Поэтому это должно работать:
x[, lapply(.SD, sum), by = ID]
#----
ID Count Count2 Count3
1: 210 13 5 5
2: 3917 5 5 5
Это действительно рассматривается в FAQ: введите vignette("datatable-faq", package="data.table")
или найдите онлайн.
Ответ 2
Поскольку data.table - это data.frame, вы можете использовать для этого агрегат:
> aggregate(. ~ ID, data=x, FUN=sum)
ID Count1 Count2 Count3
1 210 13 5 5
2 3917 5 5 5