【问题标题】:R data.table: reuse an aggregationR data.table:重用聚合
【发布时间】:2015-04-29 12:59:18
【问题描述】:

我想将相同的聚合应用到多个数据表,而不重写聚合方案。

考虑

dt1 <- data.table(id = c(1,2), a = rnorm(10), b = rnorm(10), c = rnorm(10))
dt2 <- data.table(id = c(1,2), a = rnorm(10), b = rnorm(10), c = rnorm(10))

dt1_aggregates <- dt1[, .(mean_a=mean(a), sd_a=sd(a), mean_b=mean(b), sd_b=sd(b)), by=id]
dt2_aggregates <- dt2[, .(mean_a=mean(a), sd_a=sd(a), mean_b=mean(b), sd_b=sd(b)), by=id]

有没有什么方法可以重用 dt2 的 dt1_aggregates 聚合方案,而不必写出两次?

【问题讨论】:

    标签: r expression data.table aggregate quoting


    【解决方案1】:

    你可以引用你想要的表达式,然后在 data.table 中计算它:

    my.call=quote(list(mean_a=mean(a), sd_a=sd(a), mean_b=mean(b), sd_b=sd(b)))
    dt1[, eval(my.call), by=id]
    

    生产

       id       mean_a      sd_a      mean_b      sd_b
    1:  1  0.004165423 0.7504691 -0.05001424 1.4440434
    2:  2 -0.430910188 0.9648096  0.26918995 0.8680997
    

    dt2[, eval(my.call), by=id]
    

    生产

       id     mean_a     sd_a     mean_b      sd_b
    1:  1  0.2974145 1.191863 -0.0588854 0.7896988
    2:  2 -0.4642856 1.438937  0.3612607 1.0581702
    

    【讨论】:

      猜你喜欢
      • 2020-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多