こんてんつ
Rにおいて、データフレームの列や行を並び替える方法について紹介します。tidyverseパッケージ集の中のdplyrパッケージのselect関数、arange関数を利用します。
- 列:任意の並び替え&昇順降順ソート
- 行:昇順降順ソート
関連記事
contents-open.hatenablog.com
パッケージのインストール&読み込み
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 <- 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))
行の並び替え
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の使い方はこちら。
contents-open.hatenablog.com
列の昇順降順ソートによる並び替え
列の名前でソートしたい場合は、ソートされた列名のベクトルを用意すればよい。下に示す例の場合は、列名から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