在R中扫描数组

Dav*_*d B 1 r vector

我使用R,我有一个很长的数字向量.我想查找此向量中的所有最大连续子范围,其中所有值都低于某个阈值.

例如,如果给定的向量是

5 5 6 6 7 5 4 4 4 3 2 1 1 1 2 3 4 5 6 7 6 5 4 3 2 2 3 4 4

我的阈值是4(即=<3),那么满足这个条件的值用x标记:

0 0 0 0 0 0 0 0 0 x x x x x x x 0 0 0 0 0 0 0 x x x x 0 0

我还想回复一些类似的东西(10,16), (24,27).我怎么做?

Sam*_*eer 5

要获得可以使用的范围 rle

首先创建编码

x <- c(5,5,6,6,7,5,4,4,4,3,2,1,1,1,2,3,4,5,6,7,6,5,4,3,2,2,3,4,4)
enc <- rle(x <= 3)

enc.endidx <- cumsum(enc$lengths) #ending indices
enc.startidx <- c(0, enc.endidx[1:(length(enc.endidx)-1)]) + 1 # starting indices

data.frame(startidx=enc.startidx[enc$values], endidx=enc.endidx[enc$values])
Run Code Online (Sandbox Code Playgroud)

那应该给你

  startidx endidx
1       10     16
2       24     27
Run Code Online (Sandbox Code Playgroud)