0

n 1 と s 0 を持つベクトルで表される長さ N (10k から 3M の間で変化) のシーケンスのシミュレーションを実行しようとしています。ここで、N = n+s です。

これを c( 137, 278, 21271, 124162, ... ) の形式のベクトルに減らしたいと思います。数値は元のベクトルの連続する 1 の数です。私がやっているシミュレーションのためにこれを〜100,000回行う必要があるので、できるだけ効率的な方法を探しています!

ありがとう!

マーティン

4

2 に答える 2

3

あなたはそれrleを得る ために使うことができます

x <- sample(c(1, 0), size = 3e+06, replace = TRUE)
x.rle <- rle(x)
x.rle
## Run Length Encoding
##   lengths: int [1:1499270] 4 1 2 3 4 1 1 3 1 4 ...
##   values : num [1:1499270] 0 1 0 1 0 1 0 1 0 1 ...

vectorOf1 <- x.rle$lengths[x.rle$values == 1]
vectorOf2 <- x.rle$lengths[x.rle$values == 0]

head(vectorOf1, 20)
##  [1] 1 3 1 3 4 3 1 1 1 4 4 2 3 1 1 4 1 1 1 1

head(vectorOf2, 20)
##  [1] 4 2 4 1 1 1 1 5 2 2 2 1 3 3 7 2 1 1 1 2
于 2013-03-21T17:53:16.710 に答える
0

rle関数は、これを行うための通常の方法です。

于 2013-03-21T17:53:02.243 に答える