首页 > 解决方案 > 从具有重复的双精度向量中选择 k 个最高值

问题描述

假设我们有一个带有重复的浮点数向量 x

set.seed(999) 
x <- unlist(sapply(1:5, function(.) rep(rnorm(1), rpois(1, 4)))) 
x
# -0.281740158905298 -0.281740158905298 1.04778530174241 1.04778530174241 0.270070494348895 0.270070494348895 0.270070494348895 0.304095399122096 0.304095399122096 0.304095399122096 0.304095399122096 -1.87865825782054 -1.87865825782054

在忽略重复的向量中找到第 k 个最大值的最方便的方法是什么?

对于示例向量x,结果k=30.270070494348895

一个想法是使用table,这样的解决方案在 Stack 上进行了描述:

k <- 3
sort(as.numeric(names(table(x))), decreasing = T)[k]

但是,在这些解决方案中,需要从character到进行转换number,这会导致精度损失。任何人都有更好的解决方案的想法?

标签: r

解决方案


sort(unique(x), T)[3]
[1] 0.2700705

推荐阅读