R中的序列减少

rus*_*rce 4 sequences r sequence repeat reduction

假设你有一个这样的矢量:

v <- c(1,1,1,2,2,2,2,1,1,3,3,3,3)
Run Code Online (Sandbox Code Playgroud)

怎么能最好地简化为像这样的data.frame?

v.df <- data.frame(value=c(1,2,1,3),repetitions=c(3,4,2,4))
Run Code Online (Sandbox Code Playgroud)

在一个过程语言中,我可能只是迭代循环并按照我的方式构建data.frame,但是在R中使用大型数据集这样的方法是低效的.有什么建议?

koh*_*ske 12

或者更简单

data.frame(rle(v)[])
Run Code Online (Sandbox Code Playgroud)


Gre*_*reg 8

with(rle(v), data.frame(values, lengths))
Run Code Online (Sandbox Code Playgroud)

应该得到你需要的东西.

values lengths
     1       3
     2       4
     1       2
     3       4
Run Code Online (Sandbox Code Playgroud)