将每个连续序列减少到它的值和长度

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

【讨论】:

这正是我想到的功能;我只是想不起我这辈子的名字!非常感谢。

以上是关于将每个连续序列减少到它的值和长度的主要内容,如果未能解决你的问题,请参考以下文章

从最大连续和问题看算法的时间复杂度

SQL中分组时间序列的最小值和最大值

LeetCode 128. 最长连续序列(Longest Consecutive Sequence)

找到最大的连续和,使得它的最小值和它的补码最大

和为S的连续正数序列

128. 最长连续序列