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

論文・データ解析の支援

個別に直接相談できるのが良いと、たくさんの方にご利用頂いています。

とにかく早く問題解決したい人はこちら>>直接、データ解析相談
とにかく早く問題解決したい人はこちら>>こちらで論文相談

関連記事

r tidyverse 使い方 | 列分割 separate関数 - tidyrパッケージ
tidyverseで1つの列(文字列型)を分割して別の列に分けるには、tidyrパッケージのseparate関数を使います。separate関数は、「指定した列」を「指定した区切り文字」で分割します。Rの標準的な操作strsplit関数を...
r tidyverse 使い方 | 行 グループ毎の処理 group_by関数 - dplyrパッケージ
tidyverseでデータフレームをグループ別に処理する場合、dplyrパッケージのgroup_by関数を使います。group_by関数以降の処理では、グループ毎に計算が行われます。Rの標準的な操作なら、apply系関数を使って同じような...
r tidyverse 使い方 | データフレーム重複行を削除 distinct関数 - dplyrパッケージ
tidyverseでデータフレームの重複行の削除を行う場合、dplyrパッケージのdistinct関数を使います。重複をチェックする列名を指定し、重複が見つかった行は最初に見つかったデータを残して、それ以外は削除されます。Rの標準的な操作...
r tidyverse 使い方 | 列の追加 mutate関数 - dplyrパッケージ
tidyverseでデータフレームに列を追加する場合は、dplyrパッケージのmutate関数を使います。新しい列を追加したり、既にある列に上書きすることができます。また、transmutateという関数を使った場合は、列を追加しつつ、s...
r tidyverse 使い方 | 2つのデータフレーム結合 inner_join関数 - dplyrパッケージ
tidyverseで2つのデータフレームの結合は、dplyrパッケージのjoin系関数を使います。キーが共通する部分を結合するinner_join関数がよく使われます。2つのデータフレームの結合条件によって、その他のjoin系関数を使い分...
dplyr filter関数で行の絞り込み | r tidyverse 使い方
dplyrパッケージのfilter関数をつかえば、データフレームの行の絞り込みができます。指定した条件を満たす行を絞り込みます。複数の条件を指定した場合、全ての条件を満たす行に絞りこまれます。条件式では、論理演算&(AND)や、|...
r tidyverse 使い方 | 列 filter 絞り込み select関数 - dplyrパッケージ
tidyverseで1つのデータフレームの列の絞り込みは、dplyrパッケージのselect関数を使います。selectは条件を満たす列を絞り込む関数です。様々な指定方法で絞り込みができます。列名と文字列条件のマッチや正規表現を利用した絞...
tidyverse csv・tsvのファイルの読み方・データ型の指定方法 readrパッケージ
tidyverseを使う場合、ファイルの読み書きにはreadrパッケージの専用関数(read_tsv関数・read_csv関数)を使うのが便利です。これらの専用関数ではデータ・フレーム構造より使いやすいtibble型でデータを読み込みま...
tidyverse インストールとロード tidyverseの主なパッケージ
tidyverseはRのパッケージの1つで、データ操作(抽出・連結など)を統合的に扱うためのツール群です。Rを起動後に、tidyverseのインストールを行います。インストール完了後は、使うときにパッケージをロードして使います。 ...
タイトルとURLをコピーしました