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