列名を正規表現で一括置換する
やりたいこと
Rのデータフレームで列名を一括置換したい。 ピンポイントで指定する場合は以下の記事のようにすればいいが列名が多いときは面倒。
Rのデータフレームで、列名指定で列名の一部を変更する方法 - Rプログラミングの小ネタ
例えば、この記事のようにまとめて末尾に文字列を入れたがタイプミスをしていたときにまとめて修正をするときに便利だった。
データ
df = tibble(hogehoge = 1:4, fugafuga = 1:4, hogefuga = 1:4) # A tibble: 4 x 3 # hogehoge fugafuga hogefuga # <int> <int> <int> # 1 1 1 1 # 2 2 2 2 # 3 3 3 3 # 4 4 4 4
対応
colnames(df)
でdfの列名が文字列ベクトルで取得できる。
> colnames(df) [1] "hogehoge" "fugafuga" "hogefuga"
この取得した列名に対して、str_replace(string, pattern, replacement)
をおこなうと、置換した列名の文字列ベクトルが作成される。
> str_replace(colnames(df), 'hoge', 'HOGE') [1] "HOGEhoge" "fugafuga" "HOGEfuga"
あとはこの置換した列名の文字列ベクトルを列名に上書きしたら完了。
colnames(df) = str_replace(colnames(df), 'hoge', 'HOGE') df # => # A tibble: 4 x 3 # HOGEhoge fugafuga HOGEfuga # <int> <int> <int> # 1 1 1 1 # 2 2 2 2 # 3 3 3 3 # 4 4 4 4
str_replaceなど文字列系の操作で微妙に別のことをしたい場合は以下参考。