R 将每个连续序列减少到其值和长度

R 将每个连续序列减少到其值和长度,r,sequence,repeat,reduction,R,Sequence,Repeat,Reduction,假设有一个连续值运行的向量: v <- c(1, 1, 1, 2, 2, 2, 2, 1, 1, 3, 3, 3, 3) 在过程语言中,我可能只是迭代一个循环并在运行时构建data.frame,但是对于R中的大型数据集,这种方法效率低下。有什么建议吗 with(rle(v), data.frame(values, lengths)) 你应该得到你需要的 values lengths 1 3 2 4 1 2

假设有一个连续值运行的向量:

v <- c(1, 1, 1,  2, 2, 2, 2,  1, 1,  3, 3, 3, 3)
在过程语言中,我可能只是迭代一个循环并在运行时构建data.frame,但是对于R中的大型数据集,这种方法效率低下。有什么建议吗

with(rle(v), data.frame(values, lengths))
你应该得到你需要的

values lengths
     1       3
     2       4
     1       2
     3       4
或者更简单地说

data.frame(rle(v)[])

这正是我所想的功能;我一辈子都记不起这个名字了!非常感谢。这很好,甚至更简洁。另一种方法是
data.frame(unclass(rle(v))
as.data.frame.list(rle(v))
data.frame(rle(v)[])