191 votes

La façon la plus rapide de trouver une deuxième (troisième...) le plus haut/plus bas de la valeur dans le vecteur ou d'une colonne

R propose des max et min, mais je ne vois pas vraiment un moyen rapide de trouver une autre valeur dans l'ordre en dehors de tri de l'ensemble de vecteur et de choisir la valeur de x à partir de ce vecteur.

Est-il un moyen plus rapide pour obtenir la deuxième valeur la plus élevée (par exemple)?

Merci

205voto

Rob Hyndman Points 10068

Utiliser l' partial argument de l' sort(). Pour la deuxième valeur la plus élevée:

n <- length(x)
sort(x,partial=n-1)[n-1]

64voto

Paolo Points 1475

Légèrement plus lent alternative, juste pour les enregistrements:

x <- c(12.45,34,4,0,-234,45.6,4)
max( x[x!=max(x)] )
min( x[x!=min(x)] )

31voto

Zach Points 6592

J'ai enveloppé de Rob réponse dans un peu plus général de la fonction, qui peut être utilisé pour trouver les 2ème, 3ème, 4ème (etc.) max:

maxN <- function(x, N=2){
  len <- length(x)
  if(N>len){
    warning('N greater than length(x).  Setting N=length(x)')
    N <- length(x)
  }
  sort(x,partial=len-N+1)[len-N+1]
}

maxN(1:10)

16voto

Dave Sargsyan Points 16

Voici un moyen facile de trouver des indices de N le plus petit/le plus grand des valeurs dans un vecteur(par Exemple pour N = 3):

N <- 3

N Plus Petit:

ndx <- order(x)[1:N]

N Plus Grand:

ndx <- order(x, decreasing = T)[1:N]

De sorte que vous pouvez extraire les valeurs comme:

x[ndx]

10voto

Abrar Points 43

Pour la nième valeur la plus élevée,

sort(x, TRUE)[n]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X