2017-08-31 3 views
1

の異なる部分にある加算値Iのような1と0からなるベクトルの数があります。私は異なる部分で連続し1の数をカウントしたいR:ベクター

[1] x <- c(0, 1, 1, 0, 0, 1) 

をそれは私ドンstrsplitが動作しませんので、数値ベクトルであり、理想的にかかわらず、私はゼロがあるシーケンスを分割するstrsplitのようなものを使用して検討している

[1] 2 1 

:これらの配列は、このインスタンスにで終わります数値と文字の書式の間で前後に変更したい。

もう1つ、より簡単な解決法がありますか?助けていただければ幸いです。

+0

数値を使用する場合は、文字列を処理する必要があると思います。 – R18

+0

@Sotos申し訳ありません。私はベクトルを扱っていて、私の応答を編集しています。 – Bjorn

+1

@Cathありがとう、それは完璧に働いた! – Bjorn

答えて

4

あなたはベクターに値を分割して、このようrleを使用することができます。

あなたの元の値で

x <- 11001 

temp <- rle(unlist(strsplit(as.character(x), split=""))) 

temp$lengths[temp$values == 1] 
[1] 2 1 

ベクターで起動するときに、あなたがする必要はありませんように、それは少し簡単ですstrsplitおよびunlistを使用してください。

x <- c(0, 1, 1, 0, 0, 1) 

temp <- rle(x) 

temp$lengths[temp$values == 1] 
[1] 2 1 
+1

このケースでは必要ではありませんが、 'temp $ values [temp $ values!= 0] * temp $ lengths [temp $ values!= 0]'はおそらくもっと一般的でしょう –

+1

@これは非バイナリベクトルの場合にも有効です。 – lmo

関連する問題