假设我有此数据集
我想要这个结果
我不确定该怎么做,但这是我的伪代码
问题= if_else(问题== 0,0,所有先前1的和)
我尝试过
数据集<-数据集%>%变异(问题= if_else(问题== 0,0,问题+滞后(问题))
那只会给我2作为最高数字。我将如何做到这一点。另外,总计的列名称也可能与问题不同。
答案 0 :(得分:1)
这里是data.table
的一个选项。转换为data.table
(setDT
),并按“问题”的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))