将R向量有效地减少到摘要向量

时间:2013-03-21 17:47:12

标签: performance r vector reduction

我正在尝试对序列进行模拟,该序列的长度为N(在10k和3M之间变化),由具有n 1和s 0的向量表示,其中N = n + s。

我想将其缩小为c(137,278,21271,124162,...)形式的向量,其中数字是原始向量中连续1的数字。因为我需要做大约100,000次模拟我正在寻找尽可能高效的方法!

谢谢!

马丁

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

rle函数是执行此操作的常用方法。