【发布时间】:2019-01-23 14:05:01
【问题描述】:
如何在按 .SDcols 中的第一个排序时计算 .SD 列的累积总和(不求第一列的总和)
以玩具为例:
require(data.table)
dt<-data.table(expand.grid(dow = 1:5, person = c("alice", "bob")))
setcolorder(dt, c("person", "dow"))
dt[, `:=`(current1 = runif(nrow(dt)), current2 = runif(nrow(dt)))]
求和前的数据:
person dow current1 current2
1: alice 1 0.266 0.9447
2: alice 2 0.372 0.6608
3: alice 3 0.573 0.6291
4: bob 1 0.908 0.0618
5: bob 2 0.202 0.2060
6: bob 3 0.898 0.1766
dt[order(dow), lapply(.SD, cumsum), by = c("person")] 产生所需的 current1 和 current2 的累积总和:
person dow current1 current2
1: alice 1 0.266 0.9447
2: alice 3 0.638 1.6055
3: alice 6 1.210 2.2346
4: bob 1 0.908 0.0618
5: bob 3 1.110 0.2678
6: bob 6 2.008 0.4443
而且,不希望地,总和dow。
dt[order(dow), lapply(.SD, cumsum), by = c("person"), .SDcols = c("current1", "current2")] 删除 dow 列。总而言之。
所需的输出应该对 dow 列进行排序但不求和。
【问题讨论】:
标签: r data.table