在向量中找到最长的重复元素

use*_*121 2 r vector

我想找到在下面的向量中等于"1"的连续重复元素的起始和结束索引.矢量具有可以等于"1"或NA的值.

例如:

out2
 [1] "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1"
[21] "1" NA  NA  NA  NA  NA  "1" "1" "1" "1" "1" "1" NA  NA  NA  NA  NA  NA  NA  NA
Run Code Online (Sandbox Code Playgroud)

输出应如下所示

    [,1] [,2]
[1,]  1   21
[2,]  27  32
Run Code Online (Sandbox Code Playgroud)

G. *_*eck 5

试试rle:

x <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, NA, NA, NA, NA, NA, 1, 1, 1, 1, 1, 1, NA, NA, NA, NA, NA, 
NA, NA, NA)

with(rle(x), {
  ok <- !is.na(values)
  ends <- cumsum(lengths)[ok]
  starts <- ends - lengths[ok] + 1
  cbind(starts, ends)
})
Run Code Online (Sandbox Code Playgroud)

赠送:

     starts ends
[1,]      1   21
[2,]     27   32
Run Code Online (Sandbox Code Playgroud)