2016-10-18 23 views
0

我有一個從時間序列派生的布爾向量。它基本如下所示:c(true,false,true,true,false,false,true,true ...)。在r中計算真/極限週期數

我想計算向量爲真的週期。例如:對於像這樣的向量:c(true,true,false,true),它將是2(開始時爲1個真實週期,結束時爲1個)。

該向量在開始時可以包含NAs。

我認爲是這樣的:

aaa <- c(NA,F,T,T,T,F)  
for(j in 1:(length(aaa)-1)){ 
    if(aaa[j]!=aaa[j+1]){ 
    # add a counter that returns [1] 
    } 
} 

================================= ================

編輯:這對我來說工作得很好:

data.frame("#"=unlist(rle(aaa)[1]),"length"=unlist(rle(aaa)[2])) 
+2

你期望c(真,不適用,真)給你什麼?您的查詢可能使用運行長度編碼的答案請參閱'?r' – Miff

+0

請編輯帖子以包含您的評論,並且還包括虛擬代碼以突出顯示1)輸入矢量2)輸出矢量3)您到目前爲止嘗試過什麼。請看看[如何發佈一個可重現的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – OdeToMyFiddle

+0

@Miff:c(TRUE,NA ,TRUE)應該返回2 – enroute

回答

1

怎麼這一下:

aaa[is.na(aaa)] <- FALSE 
sum(rle(aaa)$values) 

NA轉換爲FALSE,並查看在遊程長度編碼中存在多少個TRUE值(TRUE被存儲爲1,FALSE爲零)。

+0

正常工作。謝謝! – enroute