tidyverse – arrange関数でデータフレームの行をソート dplyrパッケージ

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関数で同じようなソートが可能です。



ピックアップ記事

  1. R plot 重ねる方法3パターン サンプルでわかるRの使い方

    Rでグラフ (plot) を重ねる方法は、「単純な追加」「図に重ねて描画」「濃淡で重なり表現」の3…
  2. awk split サンプルでわかる列の分割とセパレータ(文字・正規表現)の指定方法

    awkのsplit関数は、セパレータを指定して文字列を分割することができます。セパレータには文字や…
  3. awk if サンプルでわかる条件文の書き方 一致・大小比較・正規表現を簡潔に書く方法

    awkのif条件文は、条件によって処理をわけたいときに使います。条件式では、0の判定・関係演算子・…

人気記事

  1. R データ型 - 文字列・ベクター・データフレーム・マトリックス など-, R言語, スクリプト

    R subset関数 データフレームやmatrixからの条件指定による行・列の抽出
    R の subset関数は、データフレームやマトリックスか…
  2. Excel, その他, 統計

    z-score 計算方法 エクセル(Excel) 編
    統計処理で、大きく変化しているなどの判断基準にも使われる値…
  3. IGV, 解析ツール

    IGV 使い方 インストール〜便利な使い方まで | リファレンス・マッピングデータ・アノテーションを読み込んで表示しよう
    IGV(Integrative Genomics View…

おすすめ記事

  1. awk, bash 文字列操作, シェルスクリプト

    bash 部分文字列・置換・長さ・連結・分割の文字列処理
    bashのよく使う文字列処理、部分文字列・置換・連結・長さ…
  2. R言語, グラフ

    R 使い方 軸・ラベルの調整(向き・サイズ・色など) グラフの描き方
    Rによるplot(グラフ)の描画は、手軽で大変便利です。た…
  3. bash 応用, シェルスクリプト

    シェル スクリプト ファイル存在チェック・空のファイルチェック
    bashでスクリプトを作成するときに、よく使うのがファイル…