Esta es posiblemente una pregunta simple, pero no sé cómo ordenar las columnas alfabéticamente.
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
Me gusta ordenar las columnas por nombres de columna alfabéticamente, para lograr
# A B C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 8 2 8
Para otros, quiero mi propio orden definido:
# B A C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 8 2 8
Tenga en cuenta que mis conjuntos de datos son enormes, con 10000 variables. Por tanto, el proceso debe estar más automatizado.
test[ order(names(test)) ]
colnames
: termina pidiendonames
undata.frame
.Aquí está la
dplyr
respuesta obligatoria en caso de que alguien quiera hacer esto con la tubería.fuente
test%>%select(b,sort(names(.)))
lo pondrá como "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))
Se puede realizar el reemplazo de la función siguiente simple (pero solo si el marco de datos no tiene muchas columnas):
test <- test[, c("A", "B", "C")]
para otros:
test <- test[, c("B", "A", "C")]
fuente
ordenar por nombres de columnas puede funcionar fácilmente.
fuente
Si solo desea una o más columnas al frente y no le importa el orden del resto:
require(dplyr) test %>% select(B, everything())
fuente
Entonces, para tener una columna específica primero, luego el resto alfabéticamente, propondría esta solución:
test[, c("myFirstColumn", sort(setdiff(names(test), "myFirstColumn")))]
fuente
Una opción alternativa es usar
str_sort()
desde la biblioteca stringr , con el argumentonumeric = TRUE
. Esto ordenará correctamente las columnas que incluyan números no solo alfabéticamente :str_sort(c("V3", "V1", "V10"), numeric = TRUE)
# [1] V1 V3 V11
fuente
Similar a la sintaxis anterior, pero para aprender, ¿puede ordenar por nombres de columna?
sort(colnames(test[1:ncol(test)] ))
fuente
[1:ncol(test)]
está haciendo nada aquí, es solo una forma más larga de escribirsort(colnames(test))
.Esto es lo que descubrí para lograr un problema similar con mi conjunto de datos.
Primero, haga lo que James mencionó anteriormente, es decir
En segundo lugar, use la función everything () en dplyr para mover columnas específicas de interés (por ejemplo, "D", "G", "K") al comienzo del marco de datos, colocando las columnas ordenadas alfabéticamente después de esas.
fuente