【问题标题】:Efficient reduction of an R vector to a summary vector将 R 向量有效缩减为汇总向量
【发布时间】:2013-03-21 17:47:11
【问题描述】:

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

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

谢谢!

马丁

【问题讨论】:

  • 你想通过把向量放在那种形式中来完成什么?
  • @JoshuaUlrich - 我试图估计给定不同值的 1 和 0 的某些长度的概率,我在概率论方面太差了,无法计算出确切的答案。

标签: performance r vector reduction


【解决方案1】:

您可以使用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

【讨论】:

  • 完美运行!谢谢!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 2020-06-29
    • 2015-01-04
    • 1970-01-01
    • 2020-01-26
    • 2018-09-26
    相关资源
    最近更新 更多