r - 基于条件的数据子集的累积和

标签 r

我有一个我认为是简单的 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/

相关文章:

r - .export 许多对象到 R foreach

r - 如何使用stringr从R中的尺寸字符串中提取高度和宽度?

r - Sweave xtable 显示行名的列标题

R shiny - 如何将带有参数的请求 url 发送到 R shiny 并仅获得数据响应?

string - R将所有行转换为字符串

r - R data.table 逐行操作的首选性能过程?

regex - 在 R 中,如何使用正则表达式 [ :punct:] in gsub?

r - 按向量 B 对命名向量 A 的值进行排序,但尽可能保持名称顺序

以 tidyeval 的方式删除列

r - 因子与有序因子?