【问题标题】:Aggregate all columns of data.table, without having to reference them by name聚合 data.table 的所有列,而不必按名称引用它们
【发布时间】:2013-08-08 02:34:12
【问题描述】:

我想做与以下等效的操作,但使用 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 解决方案以上不可行。

【问题讨论】:

  • 供参考,?data.table 中的大量示例如下:DT[,lapply(.SD,sum),by=x]
  • @joran,你能解释一下.SD的作用吗?
  • .SD 指的是数据子集。
  • .SD. 表示“所有列,除了分组表达式中使用的列”。请阅读What does .SD stand for in data.table in R。在这种情况下,.SD 等价于 .(V1,V2,V3)list(V1,V2,V3),但它比通过名称显式引用它们要快。

标签: r aggregate data.table


【解决方案1】:
dt[, lapply(.SD, mean), by=group]

指定列:

dt[,...,by=group, .SDcols=c("V1", "V2", "V3", ...)]
dt[,...,by=group, .SDcols=names(dt)[1:100]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 2020-08-25
    • 2021-01-29
    • 2023-04-10
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多