如何计算序列中的运行?

and*_*kos 44 r count

在R中,计算序列中相同元素运行的最有效/最简单的方法是什么?

例如,如何计算非负整数序列中连续零的数量:

x <- c(1,0,0,0,1,0,0,0,0,0,2,0,0) # should give 3,5,2
Run Code Online (Sandbox Code Playgroud)

Rob*_*man 69

用途rle():

y <- rle(c(1,0,0,0,1,0,0,0,0,0,2,0,0))
y$lengths[y$values==0]
Run Code Online (Sandbox Code Playgroud)

  • 这不是一个新问题的地方. (4认同)

Sha*_*ane 23

这可以通过使用值更改位置的索引以有效的方式完成:

x <- c(1,0,0,0,1,2,1,0,0,1,1)
Run Code Online (Sandbox Code Playgroud)

找到值变化的位置:

diffs <- x[-1L] != x[-length(x)]
Run Code Online (Sandbox Code Playgroud)

获取索引,然后在后续索引中获得差异:

idx <- c(which(diffs), length(x))
diff(c(0, idx))
Run Code Online (Sandbox Code Playgroud)

  • +1:虽然`rle()`是回答OP问题的一种更简单的方法,但这种解决方案在某些情况下还有其他优点.特别是,我正在寻找一种方法来对每次运行进行唯一编号,而不是计算运行次数,我发现我可以用`c(0,cumsum(x [-1L]!= x [-length(x)])来做)`. (6认同)