将每个连续序列减少到它的值和长度
Posted
技术标签:
【中文标题】将每个连续序列减少到它的值和长度【英文标题】:Reduce each consecutive sequence to its value and length 【发布时间】:2011-03-01 22:43:57 【问题描述】:假设您有一个包含连续值的向量:
v <- c(1, 1, 1, 2, 2, 2, 2, 1, 1, 3, 3, 3, 3)
如何最好将其减少到每次运行一个值和每次运行的长度。 IE。第一次运行是1
重复两次;第二次运行:2
重复四次;第三次运行:1
重复两次,依此类推:
v.df <- data.frame(value = c(1, 2, 1, 3),
repetitions = c(3, 4, 2, 4))
在程序语言中,我可能只是遍历一个循环并构建 data.frame,但是对于 R 中的大型数据集,这种方法效率低下。有什么建议吗?
【问题讨论】:
【参考方案1】:或者更简单
data.frame(rle(v)[])
【讨论】:
很好,更简洁。 另一种方式data.frame(unclass(rle(v)))
或as.data.frame.list(rle(v))
【参考方案2】:
with(rle(v), data.frame(values, lengths))
应该会给你你需要的东西。
values lengths
1 3
2 4
1 2
3 4
【讨论】:
这正是我想到的功能;我只是想不起我这辈子的名字!非常感谢。以上是关于将每个连续序列减少到它的值和长度的主要内容,如果未能解决你的问题,请参考以下文章