R データフレームの行名、列名を扱う
UB3/informatics/r/dataframe_names
このページの最終更新日: 2024/09/30広告
行名をデータに移動、またはその逆
tibble::rownames_to_column を使う。mtcars を例にしてやってみよう。
mtcars3 <- mtcars2 %>% tibble::column_to_rownames(var = "Car")
mtcars2 では、mtcars の行名が Car というカラムに入り、かわりに通し番号の行名が割り当てられる。mtcars3 では、column_to_rownames でもとに戻している。
join() 関数 でデータフレームを結合とするときは、結合に使うデータが行名ではなくカラムになければならないので、この作業は頻繁に行うことになる。
colnames 関数で列名を変更
列名の変更。データフレームの列数と、ベクターの要素の数が違っているとエラーになる。
これの応用で、列名の文字を置換したいときは次のようにする。列名を抽出し、置換して同じところに入れる感じ。
この作業は sub() や gsub() でも同じようにできる。ただし、これらの関数に使用には注意が必要。
gsub() は該当する文字列を全て置換してしまう。つまり、"置換したい文字列" という名前の列の他に、”置換したい文字列あああ” という名前の列があった場合、そちらも置換されてしまう。これが意図せずに起こると危険である。
sub() は該当する 最初の 文字列を置換する。したがって、”置換したい文字列あああ” が "置換したい文字列" よりも前にある場合、目的としていた列の名前が置換されないことになる。
特定の 1 つの列名を変更したい場合には、置換系ではなく、次の rename() の方が安全である。
names <- sub("置換後の文字列", "置換したい文字列", names)
colnames(dataframe) <- names
colnames() では、以下のように普通にベクターを使うこともできる。
colnames(df) <- paste0("prefix_", variable)
rename 関数で列名を変更
rename("変更後の列名" = "もとの列名") という形になる。%>% でつなぐ。
これは、上記の sub や gsub と違い、"もとの列名" という列名の列のみを変更する。同じ列名はR のデータフレームには存在できないので、一意的に狙った列名を置換できることになる。
%>% を使わない場合は、
その他メモ
- データフレームの行名を削除したいときは、rownames(df) <- NULL でよい。
- magrittr::set_colnames() で、列名としたい文字列のベクトルを読み込んで、一気に列名の変更が可能 (参考)。
- 外部のベクター通りに、データフレームの行の順番を変える → match() 関数
広告
References
- Rの data frame から行や列を選択して取り出す. Link.
- R-Tips 39. データフレーム事始. Link.
- 井関龍太のページ. Rでクリップボードからデータを読み込む. Link: Last access 2018/12/09.
- R:データフレームの列を入れ替える・削除する。 Link: Last access 2020/06/09.
コメント欄
サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。