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 classer les colonnes par nom de colonne par 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 les 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 ensembles de données sont énormes, avec 10000 variables. Le processus doit donc être plus automatisé.
test[ order(names(test)) ]
colnames
: il finit par appelernames
un fichierdata.frame
.Voici la
dplyr
réponse obligatoire au cas où quelqu'un voudrait faire cela avec la pipe.la source
test%>%select(b,sort(names(.)))
le mettra comme "b, a, c"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 simple fonction suivante, le remplacement peut être effectué (mais uniquement si la trame de données n'a pas beaucoup de colonnes):
test <- test[, c("A", "B", "C")]
pour les autres:
test <- test[, c("B", "A", "C")]
la source
le tri sur les noms de colonnes peut fonctionner facilement.
la source
Si vous ne voulez qu'une ou plusieurs colonnes à l'avant et que vous ne vous souciez pas de l'ordre du reste:
require(dplyr) test %>% select(B, everything())
la source
Donc, pour avoir une colonne spécifique en premier, puis le reste par ordre alphabétique, je propose cette solution:
test[, c("myFirstColumn", sort(setdiff(names(test), "myFirstColumn")))]
la source
Une autre option consiste à utiliser à
str_sort()
partir de la bibliothèque stringr , avec l'argumentnumeric = TRUE
. Cela ordonnera correctement les colonnes qui incluent des nombres non seulement par ordre alphabétique :str_sort(c("V3", "V1", "V10"), numeric = TRUE)
# [1] V1 V3 V11
la source
Similaire à l'autre syntaxe ci-dessus mais pour l'apprentissage - pouvez-vous trier par noms de colonnes?
sort(colnames(test[1:ncol(test)] ))
la source
[1:ncol(test)]
ne fait rien ici, c'est juste une façon plus longue d'écriresort(colnames(test))
.Voici ce que j'ai découvert pour résoudre un problème similaire avec mon ensemble de données.
Tout d'abord, faites ce que James a mentionné ci-dessus, à savoir
Deuxièmement, utilisez la fonction tout () dans dplyr pour déplacer des colonnes spécifiques d'intérêt (par exemple, "D", "G", "K") au début de la trame de données, en plaçant les colonnes par ordre alphabétique après celles-ci.
la source