![見出し画像](https://assets.st-note.com/production/uploads/images/95635824/rectangle_large_type_2_5e5a7e9c814543cb489753454c8527b1.png?width=1200)
列名を変更する: 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 があります。