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
fromdata.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)
这是家庭作业问题吗?这似乎是一套非常具体的要求。你有什么特别的应用吗?不,这不是家庭作业问题,它与我的研究有关。谢谢。这是家庭作业问题吗?这似乎是一套非常具体的要求。你有什么特别的应用吗?不,这不是家庭作业问题,它与我的研究有关。谢谢