Rでloopを使って動的な名前の列を追加していきたい
目的
Rにおいて、各loop毎に異なった名前の列名を追加していきたい。
問題
変数名として解釈される前に新規列名として解釈がされる。
iris2 = iris for (n in 1:3) { column_name = paste('column',n, sep = "") iris2 = iris2 %>% mutate(column_name = n) } head(iris2) # => # Sepal.Length Sepal.Width Petal.Length Petal.Width Species column_name # 1 5.1 3.5 1.4 0.2 setosa 3 # 2 4.9 3.0 1.4 0.2 setosa 3 # 3 4.7 3.2 1.3 0.2 setosa 3 # 4 4.6 3.1 1.5 0.2 setosa 3 # 5 5.0 3.6 1.4 0.2 setosa 3 # 6 5.4 3.9 1.7 0.4 setosa 3
対応
Rでは!!
を用いることで先に変数の中身を展開したうえで関数に渡すことができる。
Programming with dplyr • dplyr
また、列名に!!
を用いて展開した値を使用する場合は、=
ではなく:=
をセットで用いる必要がある。
Programming with dplyr • dplyr
iris2 = iris for (n in 1:3) { column_name = paste('column',n, sep = "") iris2 = iris2 %>% mutate(!!column_name := n) } head(iris2) # => # Sepal.Length Sepal.Width Petal.Length Petal.Width Species column1 column2 column3 # 1 5.1 3.5 1.4 0.2 setosa 1 2 3 # 2 4.9 3.0 1.4 0.2 setosa 1 2 3 # 3 4.7 3.2 1.3 0.2 setosa 1 2 3 # 4 4.6 3.1 1.5 0.2 setosa 1 2 3 # 5 5.0 3.6 1.4 0.2 setosa 1 2 3 # 6 5.4 3.9 1.7 0.4 setosa 1 2 3