web-dev-qa-db-ja.com

シーケンスの実行をどのようにカウントできますか?

Rでは、シーケンス内の同一要素の実行をカウントする最も効率的/最も簡単な方法は何ですか?

たとえば、一連の非負整数の連続するゼロの数を数える方法:

x <- c(1,0,0,0,1,0,0,0,0,0,2,0,0) # should give 3,5,2
45
andrekos

rle()を使用:

y <- rle(c(1,0,0,0,1,0,0,0,0,0,2,0,0))
y$lengths[y$values==0]
70
Rob Hyndman

これは、値が変化する場所のインデックスを使用することにより、効率的な方法で実行できます。

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

値が変化する場所を見つけます。

diffs <- x[-1L] != x[-length(x)]

インデックスを取得してから、後続のインデックスの違いを取得します。

idx <- c(which(diffs), length(x))
diff(c(0, idx))
23
Shane