・お題:データフレームの行や列の順番を変えたい
・データフレームを作成する。
> df = data.frame(A = c(1.1, 2.1, 3.1, 4.1, 5.1),
+ B = c(1.2, 2.2, 3.2, 4.2, 5.2),
+ C = c(1.3, 2.3, 3.3, 4.3, 5.3),
+ D = c(1.4, 2.4, 3.4, 4.4, 5.4),
+ E = c(1.5, 2.5, 3.5, 4.5, 5.5),
+ row.names = c("Row1", "Row2", "Row3", "Row4", "Row5"))
> df
・列の順番を変えてみる。
> col_order_1 = c("B", "C", "D", "E", "A")
> df[, col_order_1]
・同じ列が複数あると、列名が重複しないようにナンバリングされる。
> col_order_2 = c("A", "A", "D", "D")
> df[, col_order_2]
・存在しない列名を与えると、エラーが出る。
> col_order_3 = c("F", "D", "C", "B", "A")
> df[, col_order_3]
Error in `[.data.frame`(df, , col_order_3) : 未定義の列が選ばれました
・行も似たような感じ。
> row_order_1 = c("Row3", "Row4", "Row5", "Row1", "Row2")
> df[row_order_1,]
・行名も重複を許さないらしい。
> row_order_2 = c("Row3", "Row3", "Row1", "Row1")
> df[row_order_2,]
・ちなみに、ありえない行名が含まれていた場合はNAになる(ありえない列名が入っていた場合と挙動が違う)。
> row_order_3 = c("Row1", "Row2", "Row6")
> df[row_order_3,]
・列の順番を丸ごと逆にしたければ、colnamesとrevを使えば行けそう。
> colnames(df)
[1] "A" "B" "C" "D" "E"
> rev(colnames(df) )
[1] "E" "D" "C" "B" "A"
> df[, rev(colnames(df) ) ]
おわり