使用包含 R 中最小值数的滑动 window 获取向量内的索引

Obtaining index within vector using sliding window containing minimum number of values in R

我四处搜索,但还没有找到解决我的问题的办法。我不太确定从哪里开始。

我在 R 中有一个数字向量。例如:

vec<-c(8,1,2,5,20,1,6,7,13,1,8,1,14,1,1,4,2,7)

我正在寻找值“1”在 5 的 window 中至少出现 3 次的索引。因此在上面的示例中,输出将是“10”作为 window 包含 '1,8,1,14,1' 是 5 个值的第一个序列,其中 3 个值是 '1' 并且该序列开始的索引是 10。

如有任何帮助,我们将不胜感激。

vec<-c(8,1,2,5,20,1,6,7,13,1,8,1,14,1,1,4,2,7)

window=5
numberToFind=1
timesToFind=3
for(i in 1:(length(vec)-window+1)) {
    if(sum(vec[i:(i+window-1)] == numberToFind) == timesToFind) {
        print(i)
        break
    }
}

如果您只想获取索引,请尝试使用 zoo 包中的 rollapply,如下所示:

> library(zoo)
> which(rollapply(vec, 5, FUN=function(x) sum(x==1)>=3))
[1] 10 11 12

试试这个单线。请注意,返回的 3 个索引均满足条件。

library(zoo)

which(rollapply(vec, 5, function(x) sum(x == 1) >= 3, fill = FALSE, align = "left"))
## [1] 10 11 12