118 votes

Trier les colonnes d'un cadre de données par nom de colonne

Il s'agit peut-être d'une question simple, mais je ne sais pas comment classer les colonnes par ordre alphabétique.

test = data.frame(C = c(0, 2, 4, 7, 8), A = c(4, 2, 4, 7, 8), B = c(1, 3, 8, 3, 2))

#   C A B
# 1 0 4 1
# 2 2 2 3
# 3 4 4 8
# 4 7 7 3
# 5 8 8 2

J'aime classer les colonnes par noms de colonnes dans l'ordre alphabétique, pour obtenir

#   A B C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 8 2 8

Pour d'autres, je veux un ordre bien défini :

#   B A C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 8 2 8

Veuillez noter que mes ensembles de données sont énormes, avec 10000 variables. Le processus doit donc être plus automatisé.

155voto

James Points 24725

Vous pouvez utiliser order sur le names et l'utiliser pour ordonner les colonnes lors du sous-ensemble :

test[ , order(names(test))]
  A B C
1 4 1 0
2 2 3 2
3 4 8 4
4 7 3 7
5 8 2 8

Pour votre propre ordre défini, vous devrez définir votre propre correspondance entre les noms et l'ordre. Cela dépendra de la manière dont vous souhaitez procéder, mais il suffit de remplacer une fonction quelconque par order ci-dessus devrait donner le résultat souhaité.

Vous pouvez par exemple consulter Ordonner les lignes d'un cadre de données en fonction d'un vecteur cible qui spécifie l'ordre souhaité. c'est-à-dire que vous pouvez match votre cadre de données names par rapport à un vecteur cible contenant l'ordre des colonnes souhaité.

48voto

Andrew Brēza Points 70

Voici l'obligatoire dplyr réponse au cas où quelqu'un voudrait faire cela avec le tuyau.

test %>% 
    select(sort(names(.)))

17voto

MANOJ KUMAR Points 1
test = data.frame(C=c(0,2,4, 7, 8), A=c(4,2,4, 7, 8), B=c(1, 3, 8,3,2))

En utilisant la fonction simple suivante, le remplacement peut être effectué (mais seulement si le cadre de données n'a pas beaucoup de colonnes) :

test <- test[, c("A", "B", "C")]

pour les autres :

test <- test[, c("B", "A", "C")]

11voto

demarsylvain Points 319

Une autre option consiste à utiliser str_sort() de la bibliothèque stringr avec l'argument numeric = TRUE . Cela permettra d'ordonner correctement les colonnes qui contiennent des chiffres pas seulement par ordre alphabétique :

str_sort(c("V3", "V1", "V10"), numeric = TRUE)

# [1] V1 V3 V11

8voto

Shalini Baranwal Points 595
  test[,sort(names(test))]

Le tri sur les noms des colonnes peut fonctionner facilement.

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