363

この入力をどのように変更しますか(時間、入力、出力、ファイルの順序で):

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
4

11 に答える 11

392

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

上記の質問のように順序を変更するにはdf2[,c(1,3,2,4)]

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

于 2011-09-21T07:42:14.213 に答える
191
# reorder by column name
data <- data[, c("A", "B", "C")] # leave the row index blank to keep all rows

#reorder by column index
data <- data[, c(1,3,2)] # leave the row index blank to keep all rows
于 2012-06-22T14:28:58.497 に答える
120

サブセット関数を使用することもできます。

data <- subset(data, select=c(3,2,1))

他の回答のように [] 演算子を使用することをお勧めしますが、単一のコマンドでサブセットと列の並べ替え操作を実行できることを知っておくと役立つ場合があります。

アップデート:

dplyr パッケージの select 関数を使用することもできます。

data = data %>% select(Time, out, In, Files)

効率についてはよくわかりませんが、dplyr の構文のおかげで、特に列が多い場合、このソリューションはより柔軟になるはずです。たとえば、次の例では、mtcars データセットの列を逆の順序で並べ替えます。

mtcars %>% select(carb:mpg)

以下は、一部の列のみを並べ替え、他の列は破棄します。

mtcars %>% select(mpg:disp, hp, wt, gear:qsec, starts_with('carb'))

dplyr の select 構文の詳細を参照してください。

于 2012-07-03T13:20:59.423 に答える
27

たまたま、列名がアルファベット順で降順になっているのは偶然かもしれません。その場合は、次のようにすることができます。

df<-df[,order(colnames(df),decreasing=TRUE)]

これは、多くの列を持つ大きなファイルがあるときに使用するものです。

于 2015-02-25T16:44:12.710 に答える
25

dplyrバージョンには、列を簡単に並べ替える機能が1.0.0含まれています。relocate()

dat <- data.frame(Time=c(1,2), In=c(2,3), Out=c(3,4), Files=c(4,5))

library(dplyr) # from version 1.0.0 only

dat %>%
  relocate(Out, .before = In)

また

dat %>%
  relocate(Out, .after = Time)
于 2020-04-15T14:18:57.693 に答える
19

data.tableパッケージを使用できます。

data.table 列を並べ替える方法 (コピーせずに)

require(data.table)
setcolorder(DT,myOrder)
于 2015-05-20T11:23:59.880 に答える