こんてんつ
Rにおいて、データフレームの列や行を並び替える方法について紹介します。tidyverseパッケージ集の中のdplyrパッケージのselect関数、arange関数を利用します。
- 列:任意の並び替え&昇順降順ソート
- 行:昇順降順ソート
関連記事
早見チートシート
パッケージのインストール&読み込み
install.packages("tidyverse") library(tidyverse)
列の並び替え
# 任意の順番を指定する iris_column_ordered <- iris %>% select(Petal.Width, everything()) iris_column_ordered <- iris %>% select(Petal.Length, Species, everything()) iris_column_ordered <- iris %>% select(starts_with("Petal"), everything()) # 列の名前順のcolumn_orderを作ってソートする column_order <- names(iris) %>% sort() iris_column_ordered <- iris %>% select(all_of(column_order)) column_order <- names(iris) %>% sort(decreasing = T) iris_column_ordered <- iris %>% select(all_of(column_order))
行の並び替え
# 指定した列で昇順or降順ソート iris_row_orderd <- iris %>% arrange(Sepal.Length) iris_row_orderd <- iris %>% arrange(desc(Sepal.Length)) #文字列に対応可 iris_row_orderd <- iris %>% arrange(-Sepal.Length) #文字列に対応不可 iris_row_orderd <- iris %>% arrange(Sepal.Length, Petal.Length)
詳細
列の任意並び替え
select関数によって、Petal.Widthを左端に持ってきて、その他の行を右に繋げている。
iris_column_ordered <- iris %>% select(Petal.Width, everything()) head(iris_column_ordered)
> head(iris_column_ordered) Petal.Width Sepal.Length Sepal.Width Petal.Length Species 1 0.2 5.1 3.5 1.4 setosa 2 0.2 4.9 3.0 1.4 setosa 3 0.2 4.7 3.2 1.3 setosa 4 0.2 4.6 3.1 1.5 setosa 5 0.2 5.0 3.6 1.4 setosa 6 0.4 5.4 3.9 1.7 setosa >
複数の行がある場合は、次のようにつなげる。
iris_column_ordered <- iris %>% select(Petal.Length, Species, everything()) head(iris_column_ordered)
> head(iris_column_ordered) Petal.Length Species Sepal.Length Sepal.Width Petal.Width 1 1.4 setosa 5.1 3.5 0.2 2 1.4 setosa 4.9 3.0 0.2 3 1.3 setosa 4.7 3.2 0.2 4 1.5 setosa 4.6 3.1 0.2 5 1.4 setosa 5.0 3.6 0.2 6 1.7 setosa 5.4 3.9 0.4
selectの中で利用する便利な関数を使って、指定した条件に合致するものを左に持ってくることも可能。
iris_column_ordered <- iris %>% select(starts_with("Petal"), everything()) head(iris_column_ordered)
> head(iris_column_ordered) Petal.Length Petal.Width Sepal.Length Sepal.Width Species 1 1.4 0.2 5.1 3.5 setosa 2 1.4 0.2 4.9 3.0 setosa 3 1.3 0.2 4.7 3.2 setosa 4 1.5 0.2 4.6 3.1 setosa 5 1.4 0.2 5.0 3.6 setosa 6 1.7 0.4 5.4 3.9 setosa
selectの使い方はこちら。
列の昇順降順ソートによる並び替え
列の名前でソートしたい場合は、ソートされた列名のベクトルを用意すればよい。下に示す例の場合は、列名からcolumn_order
というベクトルを用意して、昇順ソートした。その後、select関数の中で、all_of関数を使って並べ替えている。
column_order <- names(iris) %>% sort() iris_column_ordered <- iris %>% select(all_of(column_order)) head(iris_column_ordered)
> head(iris_column_ordered) Petal.Length Petal.Width Sepal.Length Sepal.Width Species 1 1.4 0.2 5.1 3.5 setosa 2 1.4 0.2 4.9 3.0 setosa 3 1.3 0.2 4.7 3.2 setosa 4 1.5 0.2 4.6 3.1 setosa 5 1.4 0.2 5.0 3.6 setosa 6 1.7 0.4 5.4 3.9 setosa
降順にしたければ、次のようにすればよい。
column_order <- names(iris) %>% sort(decreasing = T) iris_column_ordered <- iris %>% select(all_of(column_order)) head(iris_column_ordered)
> head(iris_column_ordered) Species Sepal.Width Sepal.Length Petal.Width Petal.Length 1 setosa 3.5 5.1 0.2 1.4 2 setosa 3.0 4.9 0.2 1.4 3 setosa 3.2 4.7 0.2 1.3 4 setosa 3.1 4.6 0.2 1.5 5 setosa 3.6 5.0 0.2 1.4 6 setosa 3.9 5.4 0.4 1.7
行の昇順降順ソート
特定の列名でソートする場合は、次のようにすれば良い。
iris_row_orderd <- iris %>% arrange(Sepal.Length) head(iris_row_orderd)
> head(iris_row_orderd) Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 4.3 3.0 1.1 0.1 setosa 2 4.4 2.9 1.4 0.2 setosa 3 4.4 3.0 1.3 0.2 setosa 4 4.4 3.2 1.3 0.2 setosa 5 4.5 2.3 1.3 0.3 setosa 6 4.6 3.1 1.5 0.2 setosa
降順にする場合は次のようにすれば良い。
iris_row_orderd <- iris %>% arrange(desc(Sepal.Length)) #文字列に対応可 head(iris_row_orderd) iris_row_orderd <- iris %>% arrange(-Sepal.Length) #文字列に対応不可 head(iris_row_orderd)
> head(iris_row_orderd) Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 7.9 3.8 6.4 2.0 virginica 2 7.7 3.8 6.7 2.2 virginica 3 7.7 2.6 6.9 2.3 virginica 4 7.7 2.8 6.7 2.0 virginica 5 7.7 3.0 6.1 2.3 virginica 6 7.6 3.0 6.6 2.1 virginica
複数の列でソートも可能。
iris_row_orderd <- iris %>% arrange(Sepal.Length, Petal.Length) head(iris_row_orderd)
> head(iris_row_orderd) Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 4.3 3.0 1.1 0.1 setosa 2 4.4 3.0 1.3 0.2 setosa 3 4.4 3.2 1.3 0.2 setosa 4 4.4 2.9 1.4 0.2 setosa 5 4.5 2.3 1.3 0.3 setosa 6 4.6 3.6 1.0 0.2 setosa