使用内部订单的data.table摘要

时间:2015-03-03 23:12:21

标签: r data.table

我需要一种方法来计算此data.table的第三列。

DT=data.table(group=c(1,1,0,0,1,1),x=c(1,1,1,2,2,2),ResultNeeded=c(2,2,3,3,4,4))

我猜可以修改以下内容以获得我需要的结果。  DT[,sum:=sum(x),by=group]。我只是不知道该怎么做。

2 个答案:

答案 0 :(得分:4)

data.table的开发版本v1.9.5中,有一个函数rleid(),它可以稍微更清晰地完成此任务:

require(data.table) ## v1.9.5+
DT[, ans := sum(x), by=rleid(group)]
#    group x ResultNeeded ans
# 1:     1 1            2   2
# 2:     1 1            2   2
# 3:     0 1            3   3
# 4:     0 2            3   3
# 5:     1 2            4   4
# 6:     1 2            4   4

rleid()将相同值的连续运行组合在一起(以基函数rle()命名)。

您可以按照here说明安装开发版本。

答案 1 :(得分:2)

你很接近,你只需要正确的分组:

DT[, sum := sum(x), by = cumsum(c(F, diff(group) != 0))]
#   group x ResultNeeded sum
#1:     1 1            2   2
#2:     1 1            2   2
#3:     0 1            3   3
#4:     0 2            3   3
#5:     1 2            4   4
#6:     1 2            4   4