2013-03-21 36 views
0

我試圖模擬一個長度爲N(在10k和3M之間變化)的序列,該序列由具有n 1和s 0的向量表示,其中N =的n + S。有效地將R向量簡化爲概要向量

我想將它縮小爲c(137,278,21271,124162,...)形式的向量,其中數字是原始向量中連續1的個數。因爲我需要做這個〜100,000次的模擬我正在做,我正在尋找儘可能高效的方法!

謝謝!

Martin Martin

+0

什麼是你想通過將矢量以這種形式來完成? – 2013-03-21 17:50:10

+0

'rle'浮現在腦海中。 – 2013-03-21 17:52:09

+0

@JoshuaUlrich - 我試圖估計給定不同值的1和0的某些長度的概率,並且我在概率論中太糟糕以計算確切的答案。 – Norling 2013-03-21 18:07:31

回答

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 
+0

完美的作品!謝謝! – Norling 2013-03-21 18:06:04

0

rle函數是通常的做法。