Ordenar columnas de un dataframe por nombre de columna

Posiblemente sea una pregunta simple, pero no sé cómo ordenar 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)) # CAB # 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 columnas alfabéticamente, para lograr

 # ABC # 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:

 # BAC # 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. Entonces el proceso necesita ser más automatizado.

Puede usar el order en los names , y usarlo para ordenar las columnas cuando se subconjuntan:

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

Para su propia orden definida, necesitará definir su propia asignación de los nombres al orden. Esto dependerá de cómo le gustaría hacer esto, pero el intercambio de cualquier función para esto con el order anterior debería dar el resultado deseado.

Por ejemplo, puede consultar Ordenar filas de un dataframe de acuerdo con un vector de destino que especifique el orden deseado , es decir, puede hacer match los names su dataframe con un vector objective que contenga el orden de columnas deseado.

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

Usando la función de seguimiento simple se puede realizar la sustitución (pero solo si el dataframe no tiene muchas columnas):

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

para otros:

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

ordenar los nombres de las columnas puede funcionar fácilmente.

Aquí está la respuesta obligatoria de dplyr en caso de que alguien quiera hacer esto con la tubería.

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

Esto es lo que descubrí para lograr un problema similar con mi conjunto de datos.

Primero, haz lo que James mencionó anteriormente, es decir

 test[ , order(names(test))] 

En segundo lugar, use la función todo () en dplyr para mover columnas de interés específicas (por ejemplo, “D”, “G”, “K”) al comienzo del dataframe, colocando las columnas ordenadas alfabéticamente después de esas.

 select(test, D, G, K, everything())