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]

しかし、私が検討しているケースでは、V1-V100 の 100 ほどの列がある (そして、上記の集計のように、常に単一の要素でそれらすべてを集計したい) ため、上記の 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 に答える