我已经搜索了一下,但是还没有找到解决我问题的方法。我不太确定从哪里开始。
我在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。
任何帮助将不胜感激。
答案 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
}
}