kzen.dev
  • Questions
  • Tags
  • Utilisateurs
Notifications
Récompenses
Inscription
Une fois inscrit, vous serez informé des réponses et des commentaires à vos questions.
Connectez-vous
Si vous avez déjà un compte, connectez-vous pour vérifier les nouvelles notifications.
Il y aura des récompenses pour les questions, réponses et commentaires ajoutés.
Détails
Source
Editer
Christopher DuBois
Christopher DuBois
Question

Comment trier un cadre de données par plusieurs colonnes ?

Je veux trier un data.frame par plusieurs colonnes. Par exemple, avec le data.frame ci-dessous, je voudrais trier par la colonne z (décroissante) puis par la colonne b (croissante) :

dd <- data.frame(b = factor(c("Hi", "Med", "Hi", "Low"), 
      levels = c("Low", "Med", "Hi"), ordered = TRUE),
      x = c("A", "D", "A", "C"), y = c(8, 3, 9, 9),
      z = c(1, 1, 1, 2))
dd
    b x y z
1  Hi A 8 1
2 Med D 3 1
3  Hi A 9 1
4 Low C 9 2
1263 2009-08-18T21:33:18+00:00 3
 NelsonGon
NelsonGon
Question modifiée 3 avril 2019 в 4:37
Programmation
sorting
r
dataframe
r-faq
Cette question a 1 réponse en anglais, pour les lire connectez-vous à votre compte.
Solution / Réponse
Dirk Eddelbuettel
Dirk Eddelbuettel
18 août 2009 в 9:51
2009-08-18T21:51:22+00:00
Détails
Source
Editer
#9384746

Vous pouvez utiliser la fonction order() directement sans avoir recours à des outils complémentaires -- voir cette réponse plus simple qui utilise une astuce dès le début du code example(order) :

R> dd[with(dd, order(-z, b)), ]
    b x y z
4 Low C 9 2
2 Med D 3 1
1  Hi A 8 1
3  Hi A 9 1

Edit quelques 2+ années plus tard: On vient de demander comment faire cela par index de colonne. La réponse est de simplement passer la ou les colonnes de tri souhaitées à la fonction order() :

R> dd[order(-dd[,4], dd[,1]), ]
    b x y z
4 Low C 9 2
2 Med D 3 1
1  Hi A 8 1
3  Hi A 9 1
R> 

plutôt que d'utiliser le nom de la colonne (et with() pour un accès plus facile/plus direct).

 MusTheDataGuy
MusTheDataGuy
Réponse modifiée 21 septembre 2018 в 1:42
1570
0
Christopher DuBois
Christopher DuBois
18 août 2009 в 9:37
2009-08-18T21:37:22+00:00
Détails
Source
Editer
#9384745

Avec [cette fonction (très utile) de Kevin Wright][1], publiée dans la section des astuces du wiki R, cela est facile à réaliser.

sort(dd,by = ~ -z + b)
#     b x y z
# 4 Low C 9 2
# 2 Med D 3 1
# 1  Hi A 8 1
# 3  Hi A 9 1

[1] : https://web.archive.org/web/20131108055534/http://rwiki.sciviews.org/doku.php?id=tips%3adata-frames%3asort

 MichaelChirico
MichaelChirico
Réponse modifiée 24 août 2016 в 2:49
68
0
Ian Fellows
Ian Fellows
20 août 2009 в 7:43
2009-08-20T19:43:30+00:00
Détails
Source
Editer
#9384747

Alternativement, en utilisant le paquet Deducer

library(Deducer)
dd<- sortData(dd,c("z","b"),increasing= c(FALSE,TRUE))
27
0
Ajouter une question
Catégories
Toutes
Technologie
Culture / Loisirs
Vie / Arts
Science
Professionnel
Entreprises
Utilisateurs
Tous
Nouveau
Populaire
1
Ilya Smirnov
Enregistré il y a 2 jours
2
Денис Васьков
Enregistré il y a 4 jours
3
Dima Patrushev
Enregistré il y a 6 jours
4
sirojidddin otaboyev
Enregistré il y a 2 semaines
5
Елена Гайдамамакинат
Enregistré il y a 2 semaines
DA
DE
EL
ES
FR
HU
ID
IT
JA
KO
LV
NL
NO
PL
PT
RO
RU
TR
ZH
© kzen.dev 2023
Source
stackoverflow.com
sous licence cc by-sa 3.0 avec l'attribution