当 TRUE 位于 R 中单独向量中的相同位置时,如何创建重复值的序列?

How can I create a sequence that repeats the value when TRUE is in the same position in a seperate vector in R?

例如,我如何才能有效地将 x1 中的内容转换为 x2?我正在处理一个大型数据集,因此 for 循环不是可取的。

      x1 x2
1  FALSE  1
2  FALSE  2
3   TRUE  3
4   TRUE  3
5  FALSE  4
6  FALSE  5
7  FALSE  6
8   TRUE  7
9   TRUE  7
10 FALSE  8
11 FALSE  9
12 FALSE 10
13 FALSE 11
14 FALSE 12
15 FALSE 13
16 FALSE 14
17 FALSE 15
18 FALSE 16
19  TRUE 17
20  TRUE 17
21 FALSE 18
22 FALSE 19
23 FALSE 20
24 FALSE 21

一种基本的 R 方法是在存在 FALSE 或值从以前的值变化时将值增加 1。

with(df, cumsum(!x1 | c(TRUE, diff(x1) != 0)))
#[1]  1  2  3  3  4  5  6  7  7  8  9 10 11 12 13 14 15 16 17 17 18 19 20 21

数据

df <- structure(list(x1 = c(FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, 
FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE)), row.names = c(NA, 
-24L), class = "data.frame")