2016-10-18 10 views
0

私は時系列から派生したブールベクトルを持っています。基本的に次のようになります。c(true、false、true、true、false、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(TRUE、NA、TRUE)はあなたに何を期待しますか?あなたの質問に対する答えは、 '?rle'を参照してください。 – 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) 

NAFALSEに変換し、ランレングス符号化(TRUEが1として格納されています.FALSEをゼロとして格納されています)の値がTRUE個あることを確認してください。

+0

は問題なく動作します。ありがとうございました! – enroute

関連する問題