我有一个我认为是简单的 R 任务,但我遇到了麻烦。基本上我需要根据另一列的标准对值进行累积总和。
这是关键,它应该对前几行进行累积总和,直到它遇到另一个条件。在我提供的示例中,它会在条件列中累积持续时间列中的所有值,即 1 和 2。示例如下所示。
duration <- c(2,3,2,4,5,10,2,9,7,5,8,9,10,12,4,5,6)
condition <- c(0,1,0,0,0,0,0,2,0,0,0,0,1,0,0,0,2)
accum_sum <- c(0,5,0,0,0,0,0,32,0,0,0,0,39,0,0,0,27)
df <- data.frame(duration,condition,accum_sum)
df
row duration condition accum_sum
1 2 0 0
2 3 1 5
3 2 0 0
4 4 0 0
5 5 0 0
6 10 0 0
7 2 0 0
8 9 2 32
9 7 0 0
10 5 0 0
11 8 0 0
12 9 0 0
13 10 1 39
14 12 0 0
15 4 0 0
16 5 0 0
17 6 2 27
最佳答案
使用data.table:
setDT(df)
df[, accum_sum := cumsum(duration), by = rev(cumsum(rev(condition)))]
df[condition == 0, accum_sum := 0]
# duration condition accum_sum
# 1: 2 0 0
# 2: 3 1 5
# 3: 2 0 0
# 4: 4 0 0
# 5: 5 0 0
# 6: 10 0 0
# 7: 2 0 0
# 8: 9 2 32
# 9: 7 0 0
#10: 5 0 0
#11: 8 0 0
#12: 9 0 0
#13: 10 1 39
#14: 12 0 0
#15: 4 0 0
#16: 5 0 0
#17: 6 2 27
我们通过使用 rev(cumsum(rev(condition)))
向后填充零来创建运行,然后按此“填充”条件分组。
关于r - 基于条件的数据子集的累积和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51512549/