我正在尝试对一个序列进行模拟,该序列的长度为 N(在 10k 和 3M 之间变化),由一个向量表示,该向量具有 n 个 1 和 s 0,其中 N = n+s。
我想将其简化为 c( 137, 278, 21271, 124162, ... ) 形式的向量,其中数字是原始向量中连续 1 的数量。因为我需要为我正在做的模拟做这大约 100,000 次,所以我正在寻找一种尽可能有效的方法!
谢谢!
马丁
我正在尝试对一个序列进行模拟,该序列的长度为 N(在 10k 和 3M 之间变化),由一个向量表示,该向量具有 n 个 1 和 s 0,其中 N = n+s。
我想将其简化为 c( 137, 278, 21271, 124162, ... ) 形式的向量,其中数字是原始向量中连续 1 的数量。因为我需要为我正在做的模拟做这大约 100,000 次,所以我正在寻找一种尽可能有效的方法!
谢谢!
马丁
你可以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
该rle
函数是执行此操作的常用方式。