r - 拆分一个 rle 对象

标签 r

假设我有以下 rle 对象:

r = rle(c(rep("M",28),rep("N",4265),rep("M",16),rep("S",2),rep("N",400),rep("M",10)));

我想将其分解为以下字符串向量:

a = c("28M","4265N","16M2S","400N","10M");

意思是我将“N”值和非“N”值及其对应的长度分成向量中的单独元素。

请注意,所有非 N 都粘贴在一起,这就是为什么结果有“16M2S”,而不是“16M”和“2S”分开的原因。

执行此操作的最有效方法是什么?

最佳答案

这行得通并且速度应该不错:

l <- r$lengths
v <- r$values
s <- paste0(l, v)
n <- v == "N"
i <- cumsum(c(TRUE, head(n, -1) != tail(n, -1)))

unname(vapply(split(s, i), paste, character(1), collapse = ""))
# [1] "28M"   "4265N" "16M2S" "400N"  "10M"  

关于r - 拆分一个 rle 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18994208/

相关文章:

r - 使两个随机团队形成数据集并在 R 中获得团队总分

r - 在 knitr/rmarkdown 中绘制为 png

r - ROAuth 出现未经授权的错误

r - 比较行以查看客户是否更换了产品

r - 具有透明背景但字体可见的ggrepel标签

r - R 如何使用秒小数部分格式化 POSIXct

r - data.table 什么时候保留列名?

r - R 中的 egen rowtotal (Stata) 等价物?

python - python 中的邻近图

r - 使用 Ggplot2 制作直方图时调整 x 轴和 bins