Como alguém alteraria essa entrada (com a sequência: hora, entrada, saída, arquivos):
Time In Out Files
1 2 3 4
2 3 4 5
Para esta saída (com a sequência: hora, saída, entrada, arquivos)?
Time Out In Files
1 3 2 4
2 4 3 5
Aqui estão os dados fictícios do R:
table <- data.frame(Time=c(1,2), In=c(2,3), Out=c(3,4), Files=c(4,5))
table
## Time In Out Files
##1 1 2 3 4
##2 2 3 4 5
help(Extract)
também conhecido como?'['
Respostas:
Seu quadro de dados possui quatro colunas assim
df[,c(1,2,3,4)]
. Observe que a primeira vírgula significa manter todas as linhas e o 1,2,3,4 refere-se às colunas.Para alterar a ordem como na pergunta acima, faça
df2[,c(1,3,2,4)]
Se você deseja gerar este arquivo como um CSV, faça
write.csv(df2, file="somedf.csv")
fonte
df[,c(1,3,2,4:ncol(df))]
quando não souber quantas colunas existem.fonte
data <- data[c(1,3,"Var1", 2)]
?c(1,3,"Var1", 2)
será lido como osc("1","3","Var1", "2")
vetores podem conter dados de apenas um tipo, portanto, os tipos são promovidos para o tipo mais geral presente. Como não há colunas com os nomes de caracteres "1", "3" etc., você receberá "colunas indefinidas".list(1,3,"Var1", 2)
mantém valores sem promoção de tipo, mas você não pode usar umlist
no contexto acima.mtcars[c(1,3,2)]
subconjunto funciona? Eu esperava um erro relacionado a dimensões incorretas ou similares ... Não deveria sermtcars[,c(1,3,2)]
?Você também pode usar a função de subconjunto:
Você deve usar melhor o operador [] como nas outras respostas, mas pode ser útil saber que você pode executar uma operação de reorganização de subconjunto e coluna em um único comando.
Atualizar:
Você também pode usar a função select do pacote dplyr:
Não tenho certeza da eficiência, mas graças à sintaxe do dplyr, essa solução deve ser mais flexível, especialmente se você tiver muitas colunas. Por exemplo, o seguinte reordenará as colunas do conjunto de dados mtcars na ordem oposta:
E o seguinte reorganizará apenas algumas colunas e descartará outras:
Leia mais sobre a sintaxe de seleção do dplyr .
fonte
subset()
, consulte esta pergunta .everything()
particularmente incrível;mtcars %>% select(wt, gear, everything())
Conforme mencionado neste comentário , as sugestões padrão para reordenar colunas em a
data.frame
geralmente são complicadas e propensas a erros, especialmente se você tiver muitas colunas.Esta função permite reorganizar as colunas por posição: especifique um nome de variável e a posição desejada e não se preocupe com as outras colunas.
Agora, a solicitação do OP se torna tão simples quanto isto:
Para trocar
Time
eFiles
colunas adicionalmente, você pode fazer isso:fonte
Uma
dplyr
solução (parte dotidyverse
conjunto de pacotes) é usarselect
:fonte
select(iris, Species, everything())
. Observe também que aspas não são necessárias.everything()
como na de PaulRougieux comentáriodplyr
'sgroup
também irá reorganizar as variáveis, por isso esteja atento ao usar isso em uma cadeia.Talvez seja uma coincidência que a ordem das colunas que você deseja tenha nomes de colunas em ordem alfabética decrescente. Como esse é o caso, você pode simplesmente fazer:
É isso que eu uso quando tenho arquivos grandes com muitas colunas.
fonte
!! WARNING !!
data.table
se transformaTARGET
em um vetor int:TARGET <- TARGET[ , order(colnames(TARGET), decreasing=TRUE)]
para consertar:TARGET <- as.data.frame(TARGET)
TARGET <- TARGET[ , order(colnames(TARGET), decreasing=TRUE)]
Você pode usar o pacote data.table :
Como reordenar as colunas data.table (sem copiar)
fonte
As três respostas mais bem avaliadas têm um ponto fraco.
Se o seu quadro de dados se parecer com isso
então é uma solução ruim de usar
Ele faz o trabalho, mas você acabou de introduzir uma dependência da ordem das colunas em sua entrada.
Esse estilo de programação frágil deve ser evitado.
A nomeação explícita das colunas é uma solução melhor
Além disso, se você pretende reutilizar seu código em uma configuração mais geral, pode simplesmente
o que também é bastante bom porque isola completamente literais. Por outro lado, se você usar o dplyr's
select
você configuraria aqueles que lerão seu código mais tarde, inclusive a si mesmo, para um pouco de decepção. Os nomes das colunas estão sendo usados como literais sem aparecer no código como tal.
fonte
dplyr
A versão1.0.0
inclui arelocate()
função para reordenar facilmente as colunas:ou
fonte
fonte
setcolorder
.O único que vi funcionar bem é daqui .
Use assim:
Funciona como um encanto.
fonte