聚合data.table中的多个列

时间:2012-07-27 20:51:10

标签: r dataframe aggregate data.table

我有以下示例data.table

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

我希望使用colSums来汇总所有列(a和b,尽管它们应该保持分开)。这样做的正确方法是什么?以下不起作用:

 dtb[,colSums, by="id"]

这只是一个示例,我的表有很多列,所以我想避免在函数名中指定所有列

2 个答案:

答案 0 :(得分:27)

这实际上是我想要的,并在常见问题中提到:

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

答案 1 :(得分:0)

我想在这种情况下,最快将您的数据放入长格式并接下来进行聚合(参见Matthew在此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
...