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

时间:2016-03-02 06:08:54

标签: r cumsum

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

1 个答案:

答案 0 :(得分:2)

我们创建一个逻辑索引,其中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)