J'ai un vecteur et je suis capable de retourner la valeur la plus haute et la plus basse, mais comment retourner 5 valeurs les plus hautes? Existe-t-il une solution simple d'une ligne pour cela?Comment retourner les 5 valeurs les plus élevées du vecteur dans R?
20
A
Répondre
32
> a <- c(1:100)
> tail(sort(a),5)
[1] 96 97 98 99 100
2
Oui, head(X, 5)
où X
est votre vecteur trié.
12
x[order(x)[1:5]]
3
tail(sort.int(x, partial=length(x) - 4), 5)
L'utilisation sort.int avec partielle a l'avantage d'être (potentiellement) plus rapidement par (potentiellement) ne pas faire une sorte complète. Mais en réalité, ma mise en œuvre semble un peu plus lente. Peut-être est-ce parce que, avec le paramètre partial! = NULL, le tri de 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
+0
Si vous utilisez plutôt x <-runif (1e6), vous en verriez les avantages. Notez que les 5 valeurs que vous récupérez seront en effet les 5 plus élevées, mais pas nécessairement dans un ordre trié. – Tommy
Questions connexes
- 1. En R, comment définir les premières valeurs d'un vecteur long aux valeurs d'un vecteur plus court?
- 2. Oracle SQL - Comment récupérer les 5 valeurs les plus élevées d'une colonne
- 3. Comment retourner les trois dernières valeurs d'un vecteur?
- 4. Sélectionnez n valeurs les plus élevées d'une table
- 5. Comment obtenir et afficher les valeurs les plus élevées d'une base de données?
- 6. Comment ignorer les valeurs null dans R?
- 7. multiplier tous les éléments d'un vecteur dans R
- 8. Comment créer Vecteur de vecteur dans R
- 9. Comment compter les VRAIES valeurs dans un vecteur logique
- 10. Inclure les valeurs manquantes dans table() donne R
- 11. R: supprimer les derniers éléments d'un vecteur
- 12. Fusionner deux (ou plusieurs) tableaux et conserver les valeurs les plus élevées?
- 13. Répétition des éléments du vecteur dans R
- 14. Obtenir les 3 valeurs les plus élevées de Map <String, String>
- 15. Comment puis-je obtenir plusieurs valeurs les plus élevées d'une table?
- 16. Quel est le moyen le plus efficace pour obtenir les valeurs les plus élevées et les plus faibles dans un tableau
- 17. équivalent externe() pour les listes non-vecteur dans R
- 18. mysql - un SELECT qui renvoie les 'vues' les plus élevées et les 'views' d'un identifiant spécifique
- 19. Afficher les valeurs dans R Tracer
- 20. Eviter les boucles dans R
- 21. Comparer les valeurs saisies aux valeurs dans un vecteur
- 22. Le moyen le plus simple de dériver un tableau de sous-ensembles des 10 valeurs les plus élevées?
- 23. R: comment concaténer un vecteur?
- 24. Comment obtenir efficacement les valeurs les plus élevées et les plus faibles à partir d'une liste <double?>, puis les modifier?
- 25. R question - Comment extraire les valeurs d'attributs de l'objet bystat et les placer dans des variables
- 26. remplacer les valeurs dans un vecteur basé sur un autre vecteur
- 27. Accéléré C++, problème 5-6 (copier les valeurs de l'intérieur d'un vecteur vers l'avant)
- 28. JQuery UI Autocomplete retourner toutes les valeurs
- 29. Inverser les chiffres dans R
- 30. mettre à jour les quelques lignes les plus élevées dans une table en utilisant mysql 5.1.41
Ou 'tête (tri (a, décroissante = TRUE), 5)' – Marek
queue est légèrement plus rapide que la tête et la diminution = TRUE > x <- rnorm (50000000) > system.time (queue (tri (x), 5)) système utilisateur écoulé 22,64 0,25 22,95 > system.time (tête (tri (x, diminuant = TRUE), 5)) système utilisateur écoulé 23,26 0,20 23,51 – Thierry
@Thierry Vous devez faites cela plus d'une fois et prenez le temps moyen. Parce que je pense qu'il n'y a pas de différence (statistiquement parlant), basé sur mes simulations. – Marek