使用包含R

时间:2018-08-20 15:02:09

标签: r sliding-window

我已经搜索了一下,但是还没有找到解决我问题的方法。我不太确定从哪里开始。

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

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

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

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

如果您只想获取indes,请尝试使用来自动物园软件包的rollapply,如下所示:

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

答案 1 :(得分:1)

尝试这种单线。请注意,返回的3个索引中的每个索引都满足条件。

library(zoo)

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

答案 2 :(得分:0)

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
    }
}