使用包含 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
我四处搜索,但还没有找到解决我的问题的办法。我不太确定从哪里开始。
我在 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