R言語のtidyverseパッケージに含まれているdplyrパッケージの関数rename()は、データフレームの列名を変更する機能を提供しています。しかし、通常の記法では変更前の列名と変更後の列名を直接入力しなければならないため、動的に列名を指定できません。ここでは、データフレームの列名を動的に変更する方法をお伝えします。

準備

あらかじめ、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

rename_with()で列名を変更する方法

irisデータセットで、動的に設定した列名を用いて、列名を変更するには次のようにします。


before_col <- "Species"
after_col <- "AFTER"
iris |>
  rename_with(~ after_col, all_of(before_col)) |>
  head()

  Sepal.Length Sepal.Width Petal.Length Petal.Width  AFTER
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

特殊な記法で列名を変更する方法

次のようにしても、、動的に設定した列名を用いて、列名を変更することができます。ちなみに、この書き方はrename()に限らずmutate()などでも使える方法になります。


before_col <- "Species"
after_col <- "AFTER"
iris |>
  rename("{after_col}" := !!sym(before_col)) |>
  head()

  Sepal.Length Sepal.Width Petal.Length Petal.Width  AFTER
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
R応用 データフレームの列名を動的に変更する方法