19

我想做与以下等效的操作,但使用 data.table 的“by”:

dt <- data.table(V1=rnorm(100), V2=rnorm(100), V3=rnorm(100), ...
                 group=rbinom(100,2,.5))
dt.agg <- aggregate(dt, by=list(dt$group), FUN=mean)

我知道我可以这样做:

dt.agg <- dt[, list(V1=mean(V1), V2=mean(V2), V3=mean(V3)), by=group]

但是对于我正在考虑的情况,我有 100 个左右的列 V1-V100(我总是想按一个因素聚合所有这些列,如上面的聚合)所以我上面得到的 data.table 解决方案是'可行。

4

1 回答 1

42
dt[, lapply(.SD, mean), by=group]

要指定列:

dt[,...,by=group, .SDcols=c("V1", "V2", "V3", ...)]
dt[,...,by=group, .SDcols=names(dt)[1:100]]
于 2013-08-06T21:52:21.027 回答