データフレームの列の並び替えはどのように行うのですか?

この入力(時間、入力、出力、ファイルという順序)をどのように変更するか。

Time   In    Out  Files
1      2     3    4
2      3     4    5

この出力に(順番は、time、out、in、files)?

Time   Out   In  Files
1      3     2    4
2      4     3    5

ダミーの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
質問へのコメント (3)

dataframeには4つの列があり、df[,c(1,2,3,4)]のようになります。 最初のコンマはすべての行を保持することを意味し、1,2,3,4はカラムを指すことに注意してください。

上記の質問のように順番を変えるには、df2[,c(1,3,2,4)]とします。

このファイルをcsvとして出力したい場合は、write.csv(df2, file="somedf.csv") とする。

解説 (9)

# reorder by column name
data 
解説 (4)

また、サブセット機能を使うこともできます。


data 
解説 (4)

[このコメント][1]で述べたように、「data.frame」の列を再注文するための標準的な提案は、特に列が多い場合、一般的に扱いにくく、エラーが発生しやすくなります。

この関数を使用すると、列を位置ごとに再配置できます。変数名と目的の位置を指定し、他の列については心配しないでください。


##arrange df vars by position
##'vars' must be a named vector, e.g. c("var.name"=1)
arrange.vars 
解説 (2)
select(table, "Time", "Out", "In", "Files") 

# or

select(table, Time, Out, In, Files)
解説 (4)

多分それはあなたが望む列の順序がたまたまアルファベット順に列名を持っているのは偶然です。 それはあなたがただできるケースなので:


df
解説 (1)

data.tableパッケージを使用できる場合、これは適切でコンパクトな方法を提供します。

https://stackoverflow.com/questions/12232041/how-to-reorder-data-table-columns-without-copying

setcolorder(DT,myOrder)
解説 (0)

[3][1] [トップレート][2] [回答][3]には弱点があります。

データフレームが次のようになります。

df  df
  Time In Out Files
1    1  2   3     4
2    2  3   4     5

次に、使用するのは不十分なソリューションです。

> df2[,c(1,3,2,4)]

それは仕事をしますが、あなたはあなたの入力のコラムの順序への依存を導入しました。

このスタイルのもろいプログラミングは避けてください。

列の明示的な命名は、より良いソリューションです。

data[,c("Time", "Out", "In", "Files")]

さらに、より一般的な設定でコードを再利用する場合は、簡単にできます。


out.column.name 
解説 (0)
data.table::setcolorder(table, c("Out", "in", "files"))
解説 (1)

私がよく見たのは[ここ][1]だけです。


 shuffle_columns 
解説 (0)