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