我有一个像这个例子的矢量
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,9
和2,3,3
并得到这些序列的索引。
答案 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