在 R 中使用 cumsum() 来计算零的数量而不是 1 的数量

Using cumsum() in R to count number of zeros instead of 1's

有没有办法在 R 中使用 cumsum() 来计算零而不是 1 的数量?基本上我有一个只有 0 和 1 的列表,每次遇到 0 时我都想对它们进行计数而不计算 1。

我们创建一个逻辑索引,其中 vector ('v1') 的值为 0 ('i1')。使用索引对向量进行子集化,取反以将值 0 转换为 TRUE,执行 cumsum 并通过重新分配输出来更新原始向量。

i1 <- !v1
v1[i1] <- cumsum(!v1[i1])
v1
#[1] 1 1 1 2 1 3 1 4

如果我们需要分别计算相邻的 0 即

library(data.table)
ave(v1, rleid(v1), FUN= function(x) if(all(!x)) seq_along(x) else x)
#[1] 1 1 1 2 1 1 1 1

数据

v1 <- c(1, 1, 0, 0, 1, 0, 1, 0)