当值小于1时向量中的延伸数

时间:2015-01-16 10:55:57

标签: r vector filter filtering

我问了类似的问题here。我希望在值小于1时找到块数。在下面给出的示例中,答案必须为2.

Block #1: 0.2,0.3
Block #2: 0.25959969,0.23051247,0.33962332

但是,只有当我说values==0时,解决方案才有效。如果我使用小于号码,即values<1,则答案不正确(1 0),而且必须为2.

这里我提供了可重复的例子:

x <- c(0.2,0.3,9.36401452,7.55982857,6.06992455,4.67168492,3.50976922,2.18683333,1.36610395,0.25959969,0.23051247,0.33962332)

with(rle(x), sum(values<1 & lengths>1))

1 个答案:

答案 0 :(得分:2)

这是获取&#34;块&#34;的一种方法。和#34;长度&#34;块

indx <-  inverse.rle(within.list(rle(x<1), 
                  values <- seq_along(values)))[x<1]

split(x[x<1], indx) 
#$`1`
#[1] 0.2 0.3

#$`3`
#[1] 0.2595997 0.2305125 0.3396233

length(with(rle(x <1), lengths[values]))
#[1] 2

或者

with(rle(x<1), sum(values & lengths>0) )
#[1] 2

如果是>5,只需将lengths>0替换为lengths>5

with(rle(x<1), sum(values & lengths>5) )
#[1] 0