C'est peut-être 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 ordonner les colonnes par noms de colonne par ordre alphabétique, pour atteindre
# 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 mon propre ordre 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 jeux de données sont énormes, avec 10000 variables. Le processus doit donc être plus automatisé.
Vous pouvez utiliser order
sur la names
et l'utiliser pour ordonner les colonnes lors de la sous-définition:
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 des noms avec l'ordre. Cela dépendra de la façon dont vous voudriez le faire, mais échanger la fonction que vous voulez avec ceci avec order
ci-dessus devrait donner la sortie désirée.
Vous pouvez par exemple consulter Ordonnez les lignes d'un bloc de données en fonction d'un vecteur cible spécifiant 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é.
test = data.frame(C=c(0,2,4, 7, 8), A=c(4,2,4, 7, 8), B=c(1, 3, 8,3,2))
Le remplacement de la fonction suivante simple peut être effectué (mais uniquement 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")]
Voici la réponse dplyr
obligatoire au cas où quelqu'un voudrait le faire avec le tuyau.
test %>%
select(sort(names(.)))
test[,sort(names(test))]
trier sur les noms de colonnes peut fonctionner facilement.
Si vous voulez seulement une ou plusieurs colonnes à l'avant et ne vous souciez pas de l'ordre des autres:
require(dplyr)
test %>%
select(B, everything())
Voici ce que j'ai découvert pour obtenir un problème similaire avec mon ensemble de données.
Tout d’abord, faites ce que James a mentionné ci-dessus, c’est-à-dire.
test[ , order(names(test))]
Deuxièmement, utilisez la fonction everything () dans dplyr pour déplacer des colonnes d’intérêt spécifiques (par exemple, "D", "G", "K") au début du bloc de données, en plaçant les colonnes classées par ordre alphabétique après celles-ci.
select(test, D, G, K, everything())
Le plus grand centre commercial
Une autre option consiste à utiliser str_sort()
à partir de la bibliothèque stringr , avec l'argument numeric = TRUE
.
str_sort(c("V3", "V1", "V10"), numeric = TRUE)
# [1] V1 V3 V11
Semblable à une autre syntaxe ci-dessus mais pour apprendre - pouvez-vous trier par noms de colonnes?
sort(colnames(test[1:ncol(test)] ))
Donc, pour avoir une colonne spécifique en premier, puis le reste par ordre alphabétique, je proposerais cette solution:
test[, c("myFirstColumn", sort(setdiff(names(test), "myFirstColumn")))]