見出し画像

列名を変更する: rename()

tidyverse の環境では、読み込んだデータのテーブルについて、「列名」を変更するには、 rename() 関数を使います。

rename() の使用例

下記のメタデータのテーブルで、「Symbol」列の名前を「GeneSymbol」に変更してみます。

> meta_data
# A tibble: 4 × 3
  Id    Symbol Description
  <chr> <chr>  <chr>
1 id1   AAA    lorem ipsum a
2 id2   BBB    lorem ipsum b
3 id3   CCC    lorem ipsum c
4 id4   DDD    lorem ipsum d

rename("GeneSymbol" = Symbol) のように、「"新しい列名"=元の列名」を引数に指定します。

> meta_data %>% rename("GeneSymbol" = Symbol)
# A tibble: 4 × 3
  Id    GeneSymbol Description
  <chr> <chr>      <chr>
1 id1   AAA        lorem ipsum a
2 id2   BBB        lorem ipsum b
3 id3   CCC        lorem ipsum c
4 id4   DDD        lorem ipsum d
>

新しい列名が表示されていることが確認できます。

inner_join() でテーブルを結合する場合など、キーにする列名は、同じ名前だと自動的に認識してくれるので、事前にリネームしておくとよいです。

複数の列名を変更: colnames()

複数の列の名前を変更したい場合は、rename() をパイプでつないで書くことで対応できます。

> input_data
# A tibble: 3 × 3
  Id    Sample1 Sample2
  <chr>   <dbl>   <dbl>
1 id1         1       4
2 id2         2       5
3 id3         3       6

Sample1 を S1 に、Sample2 を S2 に変更する場合は、
rename("S1" = Sample1) %>% rename("S2" = Sample2)
のようになります。

> input_data %>% rename("S1" = Sample1) %>% rename("S2" = Sample2)
# A tibble: 3 × 3
  Id       S1    S2
  <chr> <dbl> <dbl>
1 id1       1     4
2 id2       2     5
3 id3       3     6
>

ただ、数個の場合はこれでよいですが、100件の列名を変更する場合は、大変です。その場合は、クラシックな書き方を組み合わせるほうが簡単です。テーブルの列名は、colnames() 関数で取得できます。(列 = columnn なので、 column names = colnames)

> colnames(input_data)
[1] "Id"      "Sample1" "Sample2"

前回紹介した stingr の str_replace() 関数で、文字列の置換が可能です。 "Sample1" を "S1" にしたいので、 "ample" という文字列を削除するには、str_replace("ample", "") と書きます。

> colnames(input_data) %>% str_replace("ample", "")
[1] "Id" "S1" "S2"
>

上記は、表示しているだけで、input_data テーブルには変更を加えていません。実際にテーブルの列名を変更するには、下記のように指定します。

> colnames(input_data) <- colnames(input_data) %>% str_replace("ample", "")

若干、分かりにくい操作ですが、colnames は、テーブルの列名を取得するだけでなく、そのまま上書きすることができます。input_data を表示させると、列名が変更されていることが確認できます。

> input_data
# A tibble: 3 × 3
  Id       S1    S2
  <chr> <dbl> <dbl>
1 id1       1     4
2 id2       2     5
3 id3       3     6
>

rownames は使わない

ちなみに、tidyverse では、「行の名前 = rownames」は使いません。行の名前に該当するデータも、1つの列として扱います。行をリネームしたい場合は、通常のデータなので、以前紹介したように mutate() で上書きすれば良いです。

行の名前に該当するようなデータは、後ほど紹介するようなプロット図を作成するとき、ラベルに使ったりもするので、テーブルの中に含まれている方が便利だと思います。

*クラシックなデータフレームのテーブルには、 rownames があります。



この記事が気に入ったらサポートをしてみませんか?