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

R 计算并选择向量中出现的顺序,r,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) foo一种方法可以是: 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$le

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

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)
foo一种方法可以是:

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
你也可以这样做:

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

你能澄清一下……在你的
foo
向量中,
2,3,1,9
在何处/如何重复吗?很抱歉,整个序列不重复,但非零数出现重复,例如,
1,3
是非零数出现2次,然后再次为零。我使用了
rle
,并手动编写了一个类似于你的函数(在方法中)但时间更长。所以我想没有更简单的方法。我问,因为这只是涉及MCMC的5000多个数据循环中的一步,所以我尝试尽可能减少计算时间。非常感谢@alexis_laz