R - 值前的次数

时间:2015-01-06 16:14:57

标签: r performance for-loop vector

我有一个布尔变量向量(假设以下是一个名为vectorA的向量):

TRUE
FALSE
FALSE
TRUE
FALSE

我想在每个false之前计算false的出现次数并返回一个向量。对于上面的列表,矢量看起来像:

0
1
2
2
3

如果我们将TRUE / FALSE转换为0/1,这与对先前值求和相同。

的表格
0
1
1
0
1

将返回相同的向量:

0
1
2
2
3

我知道我可以使用for循环;

之类的东西
for (i in 1:length(vectorA))
    {if (i == 1)
        {0}
     elseif (vectorA[i])
        {vectorA[i-1]}
     else
        {vectorA[i-1] + 1}
     }

没有for循环有没有办法做到这一点?感谢

1 个答案:

答案 0 :(得分:4)

这个怎么样:

set.seed(124)
x <- sample(c(TRUE,FALSE),12,replace=TRUE)
##
R> x
 [1]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE
##
R> cumsum(!x)
 [1] 0 0 1 1 1 1 2 2 3 3 4 5

使用您的示例向量,

R> y <- c(TRUE,FALSE,FALSE,TRUE,FALSE)
R> cumsum(!y)
[1] 0 1 2 2 3