9

次のようなベクトルがある場合

"a": 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0

1にいくつ集まっているか知りたいのですがa、この場合、答えは 3 と 2 になります。

これを実行できるスクリプトはありますか?

4

3 に答える 3

20

を参照してください?rle

## create example vector
a <- c(rep(0, 3), rep(1, 3), rep(0, 4), rep(1, 2), rep(0, 3))

## count continuous values
r <- rle(a)

## fetch continuous length for value 1
r$lengths[r$values == 1]
# [1] 3 2
于 2012-05-17T21:31:22.487 に答える
7

これはどう?

test <- c(0,0,0,1,1,1,0,0,0,0,1,1,0,0,0)
rle(test)$lengths[rle(test)$values==1]
#[1] 3 2

大量のデータの場合、複雑な選択を使用して少し高速化できます。

diff(unique(cumsum(test == 1)[test != 1]))
#[1] 3 2
于 2012-05-17T21:32:33.457 に答える
5

他の人が質問に答えました。2つの所見を追加したいと思います。

データ入力のトリック:スキャンを使用します(デフォルトは「数値」クラスで、repやコンマは不要です)。引数として「character」を追加すると、空白で区切られた文字に対しても機能します。

a <- scan()
1: 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0
16: 
Read 15 items

rleは実際には逆関数ですrep

 arle <- rle(a)
 rep(arle$values, arle$lengths)
 [1] 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0
于 2012-05-17T22:38:29.350 に答える