r - n 个最大值已分簇

标签 r max

考虑一个数据框,其中包含以秒为单位的时间列和值列 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/

相关文章:

r - 更改以其他列为条件的所有列

r - 在 S3 函数重载中应该把省略号放在哪里?

binary - 仅使用位逻辑查找二进制中两个整数的最大值

python - 如何从语句中返回(或打印)最大命中数?

java - 如何使用扫描仪启动最小/最大循环

c# - 获取列表中的最大 KeyValuePair<KeyValuePair>

r - 用于查看数据框中是否存在行的现有函数?

R中随机选择一个样本

R在对称矩阵中用零替换矩阵元素的更好方法

c# - 在 Entity Framework C# 中返回列表的最大列表