R言語でデータフレームの列を並び替える方法について解説します。このような方法はいくつかあり、R言語に標準で搭載されている機能を使用した方法もありますが、ここではtidyverseパッケージに含まれているdplyrパッケージのrelocate()を使用した方法についてお伝えします。relocate()を使用する利点は、パイプ演算子と親和性が高くR言語に標準で搭載されている機能を使用する方法よりも可読性が高いコードが書けることが挙げられます。

relocate()の概要

relocate()は、データフレームの列を並び替えるための関数です。relocate()は、列の位置を変更し、select()と同じ構文を使用して列のブロックを一度に簡単に移動できるようにします。

relocate()の使い方

dplyr::relocate()の使い方は次になります。


relocate(.data, ..., .before = NULL, .after = NULL)

relocate()の引数の意味

.data

データフレームまたはデータフレーム拡張(例:tibble)、遅延データフレーム(例:dbplyrまたはdtplyrから)を指定します。

tidy-selectを指定できます。移動する列を指定します。

.before = NULL

tidy-selectを指定できます。…によって選択された列の宛先を指定します。
.beforeと.afterのどちらも指定しないと、列は左側に移動します。両方を指定するとエラーになります。

.after = NULL

tidy-selectを指定できます。…によって選択された列の宛先を指定します。
.beforeと.afterのどちらも指定しないと、列は左側に移動します。両方を指定するとエラーになります。

準備

あらかじめ、tidyverseパッケージを読み込んでおきます。


library(tidyverse)

解説のために、次のirisデータセットを使用します。


iris |>
  head()

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

列の位置を変更

irisデータセットで、列Speciesを列Sepal.Widthの後に変更するには次のようにします。


iris |>
  relocate(Species, .after = Sepal.Width) |>
  head()

  Sepal.Length Sepal.Width Species Petal.Length Petal.Width
1          5.1         3.5  setosa          1.4         0.2
2          4.9         3.0  setosa          1.4         0.2
3          4.7         3.2  setosa          1.3         0.2
4          4.6         3.1  setosa          1.5         0.2
5          5.0         3.6  setosa          1.4         0.2
6          5.4         3.9  setosa          1.7         0.4

複数の列の位置を変更

irisデータセットで、列Petal.Lengthと列Petal.Widthを列Speciesの後に変更するには次のようにします。


iris |>
  relocate(starts_with("Petal"), .after = Species) |>
  head()

  Sepal.Length Sepal.Width Species Petal.Length Petal.Width
1          5.1         3.5  setosa          1.4         0.2
2          4.9         3.0  setosa          1.4         0.2
3          4.7         3.2  setosa          1.3         0.2
4          4.6         3.1  setosa          1.5         0.2
5          5.0         3.6  setosa          1.4         0.2
6          5.4         3.9  setosa          1.7         0.4
R入門 データフレームの列を並び替える方法