2015-01-06 77 views
1

我有布爾變量的矢量之前(假設以下是一個名爲vectorA向量):的R - 計數出現次數值

TRUE 
FALSE 
FALSE 
TRUE 
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循環?由於

回答

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 
+1

偉大的作品!謝謝! – waealu