我有以下示例data.table
:
dtb <- data.table(a=sample(1:100,100), b=sample(1:100,100), id=rep(1:10,10))
例如,我想通过 id 聚合所有列(a 和 b,尽管它们应该分开)colSums
。这样做的正确方法是什么?以下不起作用:
dtb[,colSums, by="id"]
这只是一个示例,我的表有很多列,所以我想避免在函数名称中指定所有列
我有以下示例data.table
:
dtb <- data.table(a=sample(1:100,100), b=sample(1:100,100), id=rep(1:10,10))
例如,我想通过 id 聚合所有列(a 和 b,尽管它们应该分开)colSums
。这样做的正确方法是什么?以下不起作用:
dtb[,colSums, by="id"]
这只是一个示例,我的表有很多列,所以我想避免在函数名称中指定所有列
这实际上是我一直在寻找的,并在常见问题解答中提到:
dtb[,lapply(.SD,mean),by="id"]
我想在这种情况下,首先将您的数据转换为长格式并接下来进行聚合是最快的(请参阅 Matthew 在这篇SO 帖子中的评论):
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
...