R データフレームの行名、列名を扱う

UB3/informatics/r/dataframe_names

このページの最終更新日: 2024/09/30

  1. 行名をデータに移動、またはその逆
  2. colnames 関数で列名を変更
  3. rename 関数で列名を変更
  4. その他メモ

広告

行名をデータに移動、またはその逆

tibble::rownames_to_column を使う。mtcars を例にしてやってみよう。

mtcars2 <- mtcars %>% tibble::rownames_to_column(var = "Car")
mtcars3 <- mtcars2 %>% tibble::column_to_rownames(var = "Car")

mtcars2 では、mtcars の行名が Car というカラムに入り、かわりに通し番号の行名が割り当てられる。mtcars3 では、column_to_rownames でもとに戻している。

cars dataframe cars dataframe

join() 関数 でデータフレームを結合とするときは、結合に使うデータが行名ではなくカラムになければならないので、この作業は頻繁に行うことになる。

colnames 関数で列名を変更

列名の変更。データフレームの列数と、ベクターの要素の数が違っているとエラーになる。

colnames(dataframe) <- c("列名1", "列名2")

これの応用で、列名の文字を置換したいときは次のようにする。列名を抽出し、置換して同じところに入れる感じ。

colnames(dataframe) <- colnames(dataframe) %>% str_replace("A", "B")

この作業は sub() や gsub() でも同じようにできる。ただし、これらの関数に使用には注意が必要。

gsub() は該当する文字列を全て置換してしまう。つまり、"置換したい文字列" という名前の列の他に、”置換したい文字列あああ” という名前の列があった場合、そちらも置換されてしまう。これが意図せずに起こると危険である。

sub() は該当する 最初の 文字列を置換する。したがって、”置換したい文字列あああ” が "置換したい文字列" よりも前にある場合、目的としていた列の名前が置換されないことになる。

特定の 1 つの列名を変更したい場合には、置換系ではなく、次の rename() の方が安全である。

names <- colnames(dataframe)
names <- sub("置換後の文字列", "置換したい文字列", names)
colnames(dataframe) <- names

colnames() では、以下のように普通にベクターを使うこともできる。

colnames(df) <- variable
colnames(df) <- paste0("prefix_", variable)

rename 関数で列名を変更

rename("変更後の列名" = "もとの列名") という形になる。%>% でつなぐ。

これは、上記の sub や gsub と違い、"もとの列名" という列名の列のみを変更する。同じ列名はR のデータフレームには存在できないので、一意的に狙った列名を置換できることになる。

dataframe <- dataframe %>% rename("新列名1" = "旧列名1", "新列名2" = "旧列名2")

%>% を使わない場合は、

dataframe <- rename(dataframe, "新列名1" = "旧列名1", "新列名2" = "旧列名2)

その他メモ

  • データフレームの行名を削除したいときは、rownames(df) <- NULL でよい。
  • magrittr::set_colnames() で、列名としたい文字列のベクトルを読み込んで、一気に列名の変更が可能 (参考)。
  • 外部のベクター通りに、データフレームの行の順番を変える → match() 関数

広告

References

  1. Rの data frame から行や列を選択して取り出す. Link.
  2. R-Tips 39. データフレーム事始. Link.
  3. 井関龍太のページ. Rでクリップボードからデータを読み込む. Link: Last access 2018/12/09.
  4. R:データフレームの列を入れ替える・削除する。 Link: Last access 2020/06/09.

コメント欄

サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。