R 如何选择低于临界值的连续值?

R 如何选择低于临界值的连续值?,r,indexing,R,Indexing,假设我有几个数字,我想知道如何才能找到临界值以下的连续值。例如,在Mydata中,对于单个值好的,在这种情况下,您可以使用以下技巧。对索引应用diff将产生一个值1,只要一对索引是连续的,并且每当新的连续值块开始时,非1。您可以识别逻辑向量中的那些块开始,并沿着它运行cumsum,以生成块编号的向量。然后,tapply可以为您计算总和: consecutive.below <- function(x, threshold) { o <- which(x < thresh

假设我有几个数字,我想知道如何才能找到临界值以下的连续值。例如,在
Mydata
中,对于单个值好的,在这种情况下,您可以使用以下技巧。对索引应用
diff
将产生一个值
1
,只要一对索引是连续的,并且每当新的连续值块开始时,非
1
。您可以识别逻辑向量中的那些块开始,并沿着它运行
cumsum
,以生成块编号的向量。然后,
tapply
可以为您计算总和:

consecutive.below <- function(x, threshold) {
    o <- which(x < threshold)
    if (length(o)==0) return(x[o])
    blocks <- cumsum(c(TRUE, diff(o) != 1))
    unname(tapply(x[o], blocks, sum))
}
consecutive.below(Mydata, 10)

continued.below好的,在这种情况下,您可以使用以下技巧。对索引应用
diff
将产生一个值
1
,只要一对索引是连续的,并且每当新的连续值块开始时,非
1
。您可以识别逻辑向量中的那些块开始,并沿着它运行
cumsum
,以生成块编号的向量。然后,
tapply
可以为您计算总和:

consecutive.below <- function(x, threshold) {
    o <- which(x < threshold)
    if (length(o)==0) return(x[o])
    blocks <- cumsum(c(TRUE, diff(o) != 1))
    unname(tapply(x[o], blocks, sum))
}
consecutive.below(Mydata, 10)

continued.down下面是一个带有
rleid的选项,来自
data.table

library(data.table)
i1 <- Mydata < 10
as.vector(tapply(Mydata*i1, rleid(i1)*i1, FUN = sum)[-1])
#[1]  -10.0 -119.0   -8.5  -76.0
库(data.table)

i1这里有一个选项,带有
rleid
from
data.table

library(data.table)
i1 <- Mydata < 10
as.vector(tapply(Mydata*i1, rleid(i1)*i1, FUN = sum)[-1])
#[1]  -10.0 -119.0   -8.5  -76.0
库(data.table)

这是家庭作业问题吗?这似乎是一套非常具体的要求。你有什么特别的应用吗?不,这不是家庭作业问题,它与我的研究有关。谢谢。这是家庭作业问题吗?这似乎是一套非常具体的要求。你有什么特别的应用吗?不,这不是家庭作业问题,它与我的研究有关。谢谢