38

我有一个向量,我可以返回最高值和最低值,但是如何返回 5 个最高值?有没有一个简单的单线解决方案?

4

4 回答 4

71
> a <- c(1:100)
> tail(sort(a),5)
[1]  96  97  98  99 100
于 2010-09-11T21:23:43.160 回答
22
x[order(x)[1:5]]
于 2010-09-11T23:07:39.983 回答
4

是的,您的排序向量head( X, 5)在哪里。X

于 2010-09-11T20:44:00.750 回答
3
tail(sort.int(x, partial=length(x) - 4), 5)

将 sort.int 与 partial 一起使用具有通过(可能)不进行完整排序而(可能)更快的优势。但实际上,我的实现似乎有点慢。也许这是因为使用参数 partial != NULL,使用 shell 排序而不是快速排序?

> x <- 1:1e6
> system.time(replicate(100, tail(sort.int(x, partial=length(x) - 4), 5)))
   user  system elapsed 
  4.782   0.846   5.668
> system.time(replicate(100, tail(sort(x), 5)))
   user  system elapsed 
  3.643   0.879   4.854 
于 2010-09-12T08:07:32.397 回答