【问题标题】:R: data.table group and sum two columnsR:data.table 组和总和两列
【发布时间】:2018-12-19 16:53:10
【问题描述】:

好的,我一直在尝试使用 data.table 包对两个单独的列进行分组和求和。

我的 DT:

PARK   WTG    T_stop    T_AF
PC    81970   4.743     4.742
PC    81970   48.850    47.462
PC    81970   16.714    0.000
PC    81970   0.121     0.115
PC    81970   0.004     0.004
PC    81970   0.015     0.000
PC    81970   0.049     0.046
PC    81970   0.090     0.090
PC    81970   0.060     0.060
PC    81970   0.163     0.152

现在使用我尝试过的 data.table 函数:

DT[, lapply(.SD, sum), by = c("PARK", "WTG")]

但我的结果是这样的:

PARK   WTG    T_stop    T_AF
PC    81970   70.808    5.267

我正在寻找的是:

PARK   WTG    T_stop    T_AF
PC    81970   70.808    52.671

现在这只是我的数据集的一个 sn-p,大约有 700 行

【问题讨论】:

  • data.table 对你来说是强制性的吗?
  • 不,我只是喜欢使用那个包,但可能适合不同的方法。
  • 如果我在示例数据上尝试您的代码,我会得到您预期的结果。
  • 喜欢这个? DT[, lapply(.SD,sum), by = .(PARK, WTG)]
  • @phiver 是的,但是当在我的 700 行的完整 DT 上运行它时,T_AF 始终是 5.267 而不是 52.671

标签: r data.table


【解决方案1】:

从您的 cmets 看来,您似乎得到了预期的结果,但采用科学计数法。如果您想按您所说的那样查看,请尝试四舍五入到小数点后 3 位:

DT[, lapply(.SD, function(x) round(sum(x), 3)), by = c("PARK", "WTG")]

【讨论】:

【解决方案2】:

使用包 plyr 你可以试试这个:

DT_sum <- ddply(DT, .("PARK","WTG"), colSums)

【讨论】:

    猜你喜欢
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多