web-dev-qa-db-fra.com

Comment renvoyer les 5 valeurs les plus élevées du vecteur dans R?

J'ai un vecteur et je peux retourner la valeur la plus élevée et la plus basse, mais comment retourner les 5 valeurs les plus élevées? Existe-t-il une solution simple en une ligne pour cela?

30
pixel
> a <- c(1:100)
> tail(sort(a),5)
[1]  96  97  98  99 100
53
chrisamiller
x[order(x)[1:5]]
20
hadley

Oui, head( X, 5)X est votre vecteur trié.

3
Dirk Eddelbuettel
tail(sort.int(x, partial=length(x) - 4), 5)

L'utilisation de sort.int avec partial a l'avantage d'être (potentiellement) plus rapide en (potentiellement) ne faisant pas un tri complet. Mais en réalité, ma mise en œuvre semble un peu plus lente. C'est peut-être parce qu'avec le paramètre partial! = NULL, le tri Shell est utilisé plutôt que le tri rapide?

> 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 
3
David F