胜利序列

use*_*195 8 r

我正在尝试计算二元向量的一系列胜利条纹.给出一个矢量

set.seed(2)
x <- sample(c(0,1), 10, replace = TRUE)
[1] 0 1 1 0 1 1 0 1 0 1
Run Code Online (Sandbox Code Playgroud)

我想计算每次有零时"重置"的累计和.因此,在这种情况下,函数的输出应该是

[1] 0 1 2 0 1 2 0 1 0 1
Run Code Online (Sandbox Code Playgroud)

在R上最简单的方法是什么?

Ron*_*hah 15

我们可以使用ave并创建一个分组变量,cumsum在向量中每次出现0,并计算每组中不带0的连续数字.

ave(x, cumsum(x==0), FUN = seq_along) - 1
#[1] 0 1 2 0 1 2 0 1 0 1
Run Code Online (Sandbox Code Playgroud)