计算并选择向量中出现的顺序

时间:2014-08-24 22:28:09

标签: r

我有一个像这个例子的矢量

foo <- c(0,0,0,0,1,3,0,0,0,2,3,1,9,0,0,0,0,2,0,0,0,0,2,3,3,0,0,0,0)

这意味着存在非零数字的序列(真实数据是许多向量长度为​​数千)。

我想找到那些重复的序列,例如仅超过2次。即上面的序列2,3,1,92,3,3并得到这些序列的索引。

2 个答案:

答案 0 :(得分:2)

一种方式可能是:

r = rle(foo > 0)
wh = r$lengths > 2 & r$values
mapply(function(a, b) a:(a + b), 
       cumsum(r$lengths)[wh] - r$lengths[wh] + 1, 
       r$lengths[wh] - 1)  #the indices to subset 'foo'
#[[1]]
#[1] 10 11 12 13
#
#[[2]]
#[1] 23 24 25

答案 1 :(得分:0)

你也可以这样做:

 which(!!ave(foo, cumsum(c(1,abs(diff(!!foo)))), 
            FUN=function(x) !!x & length(x)>2))
 # [1] 10 11 12 13 23 24 25