Подтвердить что ты не робот

Объединение нескольких столбцов в data.table

У меня есть следующий образец data.table:

dtb <- data.table(a=sample(1:100,100), b=sample(1:100,100), id=rep(1:10,10))

Я хотел бы объединить все столбцы (a и b, хотя они должны храниться отдельно) с помощью id, используя colSums, например. Каков правильный способ сделать это? Не работает следующее:

 dtb[,colSums, by="id"]

Это всего лишь образец, и в моей таблице много столбцов, поэтому я хочу избежать указания всех из них в имени функции

4b9b3361

Ответ 1

это на самом деле то, что я искал и упоминается в FAQ:

dtb[,lapply(.SD,mean),by="id"]

Ответ 2

Я предполагаю, что в этом случае быстрее всего перенести данные в длинный формат и затем выполнить свою агрегацию (см. комментарий Мэтью в этой SO post):

library(data.table)
dtb <- data.table(a=sample(1:100,100), b=sample(1:100,100), id=rep(1:10,10))
library(reshape2)
dt_long <- as.data.table(melt(dtb, id.var="id"))
dt_long[, sum(value), by=c("id","variable")]
    id variable  V1
 1:  1        a 601
 2:  2        a 440
 3:  3        a 496
 4:  4        a 553
 5:  5        a 444
 6:  6        a 466
 7:  7        a 525
 8:  8        a 553
 9:  9        a 541
...