まずは蝋の翼から。

学んだことを書きながら確認・整理するためのメモブログ。こういうことなのかな?といったことをふわっと書いたりしていますが、理解が浅いゆえに的はずれなことも多々あると思うのでツッコミ歓迎

列名を正規表現で一括置換する

やりたいこと

Rのデータフレームで列名を一括置換したい。 ピンポイントで指定する場合は以下の記事のようにすればいいが列名が多いときは面倒。

Rのデータフレームで、列名指定で列名の一部を変更する方法 - Rプログラミングの小ネタ

例えば、この記事のようにまとめて末尾に文字列を入れたがタイプミスをしていたときにまとめて修正をするときに便利だった。

knknkn.hatenablog.com

データ

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など文字列系の操作で微妙に別のことをしたい場合は以下参考。

stringr: Rの文字列をまともな方法で処理する - Heavy Watal