tidyverseで1つのデータフレームに対する行のソートは、dplyrパッケージのarrange関数を使います。arrange関数は、データフレームの行をソートする関数です。エクセルの行の並べ替えのように、優先度の高いものから複数の条件を指定できます。昇順・降順も指定可能です。Rの標準的な操作では、order関数で同じようなソートが可能です。
arange 行のソート・並べ替え
dplyrパッケージのarrange関数を使えば、データフレームについて行のソートを行うことができます。tidyverseパッケージをロードすると使えるようになります。ソートする複数の列を指定でき、指定した順に優先的にソートされます。
書式
arrange関数は、第1引数にデータ、第2引数以降にソートする列名を優先度の高いものから順に複数指定できます。尚、パイプ(%>%)を使って連続的に処理を記述する場合は、第1引数のデータは省略することができます。
行の並び替え
> arrange(データ, ソート列1, ソート列2, ...) > データ %>% arrange(ソート列1, ソート列2, ...)
単純なソート・1列指定
arrange関数に1列(数値列)を指定して、昇順ソートしています。指定した列は、「Sepal.Length」で、対象列のデータが昇順にソートされています。
1: > library(tidyverse) 2: 3: > iris %>% arrange(Sepal.Length) %>% head 4: Sepal.Length Sepal.Width Petal.Length Petal.Width Species 5: 1 4.3 3.0 1.1 0.1 setosa 6: 2 4.4 2.9 1.4 0.2 setosa 7: 3 4.4 3.0 1.3 0.2 setosa 8: 4 4.4 3.2 1.3 0.2 setosa 9: 5 4.5 2.3 1.3 0.3 setosa 10: 6 4.6 3.1 1.5 0.2 setosa
複数列を指定してソート
arrange関数に2列(数値列)を指定して、昇順ソートしています。指定した列は、「Sepal.Length, Petal.Length」で、左側の列を優先的に、対象列のデータが昇順にソートされています。
1: > iris %>% arrange(Sepal.Length, Petal.Length) %>% head 2: Sepal.Length Sepal.Width Petal.Length Petal.Width Species 3: 1 4.3 3.0 1.1 0.1 setosa 4: 2 4.4 3.0 1.3 0.2 setosa 5: 3 4.4 3.2 1.3 0.2 setosa 6: 4 4.4 2.9 1.4 0.2 setosa 7: 5 4.5 2.3 1.3 0.3 setosa 8: 6 4.6 3.6 1.0 0.2 setosa
文字列の列を並べ替え
arrange関数に1列(文字型の列)を指定して、昇順ソートしています。指定した列は、「Species」で、対象列のデータが昇順にソートされています。より結果がわかりやすいように、Species別で3行選び、順番指定(101行目, 51行目, 1行目)で並べています。直後のarrangeで、それを昇順に並べ替えています。
1: > iris %>% slice(101, 51, 1) 2: Sepal.Length Sepal.Width Petal.Length Petal.Width Species 3: 1 6.3 3.3 6.0 2.5 virginica 4: 2 7.0 3.2 4.7 1.4 versicolor 5: 3 5.1 3.5 1.4 0.2 setosa 6: 7: > iris %>% slice(101, 51, 1) %>% arrange(Species) 8: Sepal.Length Sepal.Width Petal.Length Petal.Width Species 9: 1 5.1 3.5 1.4 0.2 setosa 10: 2 7.0 3.2 4.7 1.4 versicolor 11: 3 6.3 3.3 6.0 2.5 virginica
行の並べ替え(降順)
数値の列の降順
arrange関数に1列(数値列)を指定して、降順ソートしています。指定した列(条件)は、「-Sepal.Length」で、対象列のデータが降順にソートされています。列名にー(マイナス)をつけることで降順になります。ただし、文字列型の列で、この指定方法はできません。
1: > iris %>% arrange(-Sepal.Length) %>% head 2: Sepal.Length Sepal.Width Petal.Length Petal.Width Species 3: 1 7.9 3.8 6.4 2.0 virginica 4: 2 7.7 3.8 6.7 2.2 virginica 5: 3 7.7 2.6 6.9 2.3 virginica 6: 4 7.7 2.8 6.7 2.0 virginica 7: 5 7.7 3.0 6.1 2.3 virginica 8: 6 7.6 3.0 6.6 2.1 virginica
文字列の列の降順
arrange関数に1列(文字型の列)を指定して、降順ソートしています。指定した列(条件)は、「sesc(Species)」で、対象列のデータが降順にソートされています。より結果がわかりやすいように、Species別で3行選び、順番指定(1行目, 51行目, 101行目)で取り出しました。直後のarrangeで、それを降順に並べ替えています。文字列の降順ソートは、desc関数を使って指定します。
1: > iris %>% slice(1, 51, 101) 2: Sepal.Length Sepal.Width Petal.Length Petal.Width Species 3: 1 5.1 3.5 1.4 0.2 setosa 4: 2 7.0 3.2 4.7 1.4 versicolor 5: 3 6.3 3.3 6.0 2.5 virginica 6: 7: > iris %>% slice(1, 51, 101) %>% arrange(desc(Species)) 8: Sepal.Length Sepal.Width Petal.Length Petal.Width Species 9: 1 6.3 3.3 6.0 2.5 virginica 10: 2 7.0 3.2 4.7 1.4 versicolor 11: 3 5.1 3.5 1.4 0.2 setosa
Rの標準的な操作
データフレームに対して行のソート行う場合、Rの標準的な方法ではorder関数を使います。データフレーム([行,列])の行にorder関数(並び替えたい列名)を指定します。order関数には、優先順位をつけて複数指定できます。昇順・降順の指定は、decreasingパラメータで指定します。数値型の列・文字型の列ともにソート可能です。
1列の単純なソート
1: > iris[order(iris$Sepal.Length),] %>% head 2: Sepal.Length Sepal.Width Petal.Length Petal.Width Species 3: 14 4.3 3.0 1.1 0.1 setosa 4: 9 4.4 2.9 1.4 0.2 setosa 5: 39 4.4 3.0 1.3 0.2 setosa 6: 43 4.4 3.2 1.3 0.2 setosa 7: 42 4.5 2.3 1.3 0.3 setosa 8: 4 4.6 3.1 1.5 0.2 setosa
1列の単純なソート(降順)
1: > iris[order(iris$Sepal.Length, decreasing=T), ] %>% head 2: Sepal.Length Sepal.Width Petal.Length Petal.Width Species 3: 132 7.9 3.8 6.4 2.0 virginica 4: 118 7.7 3.8 6.7 2.2 virginica 5: 119 7.7 2.6 6.9 2.3 virginica 6: 123 7.7 2.8 6.7 2.0 virginica 7: 136 7.7 3.0 6.1 2.3 virginica 8: 106 7.6 3.0 6.6 2.1 virginica
優先順位付きで2列指定のソート
1: > iris[order(iris$Sepal.Length, iris$Petal.Length),] %>% head 2: Sepal.Length Sepal.Width Petal.Length Petal.Width Species 3: 14 4.3 3.0 1.1 0.1 setosa 4: 39 4.4 3.0 1.3 0.2 setosa 5: 43 4.4 3.2 1.3 0.2 setosa 6: 9 4.4 2.9 1.4 0.2 setosa 7: 42 4.5 2.3 1.3 0.3 setosa 8: 23 4.6 3.6 1.0 0.2 setosa
文字型の列のソート
1: > iris_3 <- iris %>% slice(101, 51, 1) 2: Sepal.Length Sepal.Width Petal.Length Petal.Width Species 3: 1 6.3 3.3 6.0 2.5 virginica 4: 2 7.0 3.2 4.7 1.4 versicolor 5: 3 5.1 3.5 1.4 0.2 setosa 6: 7: > iris_3[order(iris_3$Sepal.Length),] 8: Sepal.Length Sepal.Width Petal.Length Petal.Width Species 9: 3 5.1 3.5 1.4 0.2 setosa 10: 1 6.3 3.3 6.0 2.5 virginica 11: 2 7.0 3.2 4.7 1.4 versicolor 12: 13: > iris_3[order(iris_3$Sepal.Length, decreasing=T),] 14: Sepal.Length Sepal.Width Petal.Length Petal.Width Species 15: 2 7.0 3.2 4.7 1.4 versicolor 16: 1 6.3 3.3 6.0 2.5 virginica 17: 3 5.1 3.5 1.4 0.2 setosa
まとめ
- tidyverseで1つのデータフレームに対する行のソートは、dplyrパッケージのarrange関数を使う。
- arrange関数は、優先順位をつけて複数の列でソートできる。
- 数値型の列のソート、文字型の列のソートも可能。昇順・降順も指定可能。
- Rの標準的な操作では、order関数で同じようなソートが可能です。
論文・データ解析の支援
個別に直接相談できるのが良いと、たくさんの方にご利用頂いています。


関連記事








