r-识别向量的第一次出现,其中15个值中的12个为1



我有一个向量,像这样:

test = c(NA, 1, 1, 1, NA, 1, 1, 1, 1, 1, 1, 1, 1, NA, NA, NA, 1, 1, 1, 1, NA, NA, 1)

在这个向量中,我想第一次确定15个值中的12个等于1。

我已经开始使用rle来计算连续值:

#get counts of sequences
count = rle(test)

然后得到一个基于此的序列:

#make a sequence of the counts
new <- sequence(count$lengths) 

然后,我将把new中的任何值变为0,其中test值等于NA:

#when the value was na make the count 0
new[is.na(test)] <- 0

最后,我将所有其他值更改为1:

#make all other counts 1
new[new !=0] <- 1

将返回:

[1] 0 1 1 1 0 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 0 0 1

这就是我陷入困境的地方,现在我知道15个值中第一次有12个值为1的索引位置是idx=6,但我陷入了如何用算法检索它的困境。

我们可以使用zoo::rollsum来找到下一个15个值的总和为12或更多的第一个点。

which(zoo::rollsum(test, 15, align = "left", fill = 0) >= 12)[1]
#> [1] 6

由reprex包于2020-07-17创建(v0.3.0(

我们可以用rollapply来做逻辑向量的sum,并用match得到和为12的第一个匹配的索引

library(zoo)
match(12, rollapply(test, width = 15, FUN = function(x) sum(x== 1, na.rm = TRUE)))
#[1] 6

最新更新