Вот вариант с data.table
.Преобразуйте в data.table
(setDT
), сгруппированные по rleid
(id-длины-длины) в «Problem», умножьте «Problem» на номер строки (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))
data
df1 <- data.frame(Problem = c(0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1))