Esta é possivelmente uma pergunta simples, mas não sei como ordenar as colunas em ordem alfabética.
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
Eu gosto de ordenar as colunas por nomes de coluna em ordem alfabética, para alcançar
# A B C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 8 2 8
Para outros, quero meu próprio pedido definido:
# B A C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 8 2 8
Observe que meus conjuntos de dados são enormes, com 10.000 variáveis. Portanto, o processo precisa ser mais automatizado.
test[ order(names(test)) ]
colnames
: acaba chamandonames
por adata.frame
.Aqui está a
dplyr
resposta obrigatória caso alguém queira fazer isso com o cachimbo.test %>% select(sort(names(.)))
fonte
test%>%select(b,sort(names(.)))
será colocado 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))
Usando a seguinte substituição de função simples pode ser realizada (mas apenas se o quadro de dados não tiver muitas colunas):
test <- test[, c("A", "B", "C")]
para os outros:
test <- test[, c("B", "A", "C")]
fonte
test[,sort(names(test))]
classificar em nomes de colunas pode funcionar facilmente.
fonte
Se você deseja apenas uma ou mais colunas na frente e não se importa com a ordem das demais:
fonte
Então, para que uma coluna específica venha primeiro, depois o resto em ordem alfabética, eu proporia esta solução:
test[, c("myFirstColumn", sort(setdiff(names(test), "myFirstColumn")))]
fonte
Uma opção alternativa é usar
str_sort()
from library stringr , com o argumentonumeric = TRUE
. Isso ordenará corretamente as colunas que incluem números não apenas em ordem alfabética :str_sort(c("V3", "V1", "V10"), numeric = TRUE)
# [1] V1 V3 V11
fonte
Semelhante a outra sintaxe acima, mas para aprendizado - você pode classificar por nomes de coluna?
sort(colnames(test[1:ncol(test)] ))
fonte
[1:ncol(test)]
não está fazendo nada aqui, é apenas uma maneira mais longa de escreversort(colnames(test))
.Aqui está o que descobri para resolver um problema semelhante com meu conjunto de dados.
Primeiro, faça o que James mencionou acima, ou seja,
test[ , order(names(test))]
Em segundo lugar, use a função everything () em dplyr para mover colunas específicas de interesse (por exemplo, "D", "G", "K") no início do quadro de dados, colocando as colunas ordenadas alfabeticamente após essas.
fonte