滚动的天数总和为1,如果值等于0,则将重置

时间:2019-05-03 19:20:51

标签: r

假设我有此数据集

enter image description here

我想要这个结果

enter image description here

我不确定该怎么做,但这是我的伪代码

问题= if_else(问题== 0,0,所有先前1的和)

我尝试过

数据集<-数据集%>%变异(问题= if_else(问题== 0,0,问题+滞后(问题))

那只会给我2作为最高数字。我将如何做到这一点。另外,总计的列名称也可能与问题不同。

1 个答案:

答案 0 :(得分:1)

这里是data.table的一个选项。转换为data.tablesetDT),并按“问题”的rleid(游程长度ID)分组,然后将“问题”乘以行号(seq_len(.N) )并将其分配(:=到'问题'

library(data.table)
setDT(df1)[, Problem := seq_len(.N) * Problem, rleid(Problem)]
df1
#    Problem
# 1:       0
# 2:       1
# 3:       2
# 4:       3
# 5:       0
# 6:       0
# 7:       1
# 8:       2
# 9:       0
#10:       0
#11:       1

或使用base R

with(rle(df1$Problem), sequence(lengths) * rep(values, lengths))

数据

df1 <- data.frame(Problem = c(0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1))