考虑一个数据框,其中包含以秒为单位的时间列和值列 x。 我试图找到 x 的 n 个最大值的索引,这些值之间至少相隔 lambda 的时间。
例如,如果 df 如下:
time, x
1, 100
2, 95
4, 10
5, 100
7, 99
8, 98
10, 98
12, 10
查找间隔 4 秒的 3 个最大值,nlargest(data = df, n = 3, lambda = 4)
应返回 1, 5, 10。
不幸的是,我还没有找到一个聪明的方法来做到这一点。任何提示将非常受欢迎!
最佳答案
如果时间!= 1:k
(或者如果时间== 1:k
)你可以这样做
set.seed(94)
df <- data.frame(time = seq(1,200,2), x = sample(1:200))
n <- 4
lambda <- 20
sorted <- df[order(-df$x),]
result <- sorted[1,]
i <- 1
while (nrow(result) < n){
if (all(abs(sorted[i, 'time'] - result[, 'time']) >= lambda)) {
result <- rbind(result, sorted[i,])
}
i <- i + 1
}
result[,2]
## [1] 200 199 198 196
min(abs(diff(result[order(result$time),'time']))) >= lambda
## [1] TRUE
关于r - n 个最大值已分簇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42749582/