Rでは、シーケンス内の同一要素の実行をカウントする最も効率的/最も簡単な方法は何ですか?
たとえば、一連の非負整数の連続するゼロの数を数える方法:
x <- c(1,0,0,0,1,0,0,0,0,0,2,0,0) # should give 3,5,2
rle()
を使用:
y <- rle(c(1,0,0,0,1,0,0,0,0,0,2,0,0))
y$lengths[y$values==0]
これは、値が変化する場所のインデックスを使用することにより、効率的な方法で実行できます。
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))