开发者

Reduce each consecutive sequence to its value and length

Assume you have a vector with runs of consecutive values:

v <- c(1, 1, 1,  2, 2, 2, 2,  1, 1,  3, 3, 3, 3)

How can it be best reduced to one value per run and the length of each run. I.e. the first run is 1 repeated two times; 2nd run: 2 repeated four times; 3rd run: 1 repeated two times, and so on:

v.df <- data.frame(value = c(1, 2, 1, 3),
                   repetitions = c(3, 4, 2, 4))

In a procedural language I might just iterate through a loop and build the data开发者_Go百科.frame as I go, but with a large dataset in R such an approach is inefficient. Any advice?


or more simply

data.frame(rle(v)[])


with(rle(v), data.frame(values, lengths))

should get you what you need.

values lengths
     1       3
     2       4
     1       2
     3       4
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜