R の pivot_longer 関数: データフレームの縦長、横長を変換する
UBC/informatics/r/pivot
このページの最終更新日: 2024/09/30このページが長くなったので、pivot_wider() は別のページに移しました。以下のリンクからどうぞ。
広告
pivot() 系の関数とは
pivot() 系の関数には、pivot_longer() および pivot_wider() が含まれ、それぞれデータを縦長、横長に変換する。
ggplot2 のインプットが縦長のデータフレームなので、これを使う場合に pivot() 関数で前処理することが多い。
pivot_longer() 関数の使い方
組み込みデータセット の mtcars を使ってみる。このデータは、以下のように車の種類が行に、mpg (マイル/ガロン、燃費の指標)、hp (馬力 horse power) などが列になっている。
これは、このページで説明しているところの
Mazda RX4 | mpg | 21.0 |
Mazda RX4 Wag | mpg | 21.0 |
Datsun 710 | mpg | 22.8 |
以下略 |
pivot_longer() の基本的な syntax は以下の通り。cols で指定した列の名前が names_to の列へ行き、値が values_to の列へ行く。
1 つのパラメーターを指定
具体例を見てみよう。mpg のみに興味がある場合、cyl などの余計な列は予め除いておく。
mtcars2 <- select(mtcars, mpg) %>% tibble::rownames_to_column(var = "car")
# pivot_longer で変換する
Long <- pivot_longer(mtcars2, cols = c("mpg"),
names_to = "parameter", values_to = "value")
2 つのパラメーターを指定
mpg と cyl を変換後のデータに含めたい場合。縦長なので、完成系は以下のようなイメージになる。
Mazda RX4 | mpg | 21.0 |
Mazda RX4 | cyl | 6 |
Mazda RX4 Wag | mpg | 21.0 |
Mazda RX4 Wag | cyl | 6 |
Datsun 710 | mpg | 22.8 |
Datsun 710 | cyl | 4 |
略 |
この場合は、mpg と cyl の 2 行を選択して pivot_longer を使う。デフォルトの設定では、car でソートしているようだ。
# pivot_longer で変換する
Long2 <- pivot_longer(mtcars2, cols = c("mpg", "cyl"),
names_to = "parameter", values_to = "value")
全てのパラメーターを指定
全てのパラメーターを含めたい場合は、次のようになる。
ここで注意するのは、対象とする列を指定しているベクター param に car が含まれていないことである。car を含めるというのは、つまり以下のようなテーブルを作ることである。
parameters | values |
car | Mazda RX4 |
mpg | 21.0 |
cyl | 6 |
略 |
この場合、values の列に数値と Mazda RX4 などの文字列がどちらも入ることになる。これは以下のようなエラーになる。
Error in `pivot_longer_spec()`:
! Can't combine `car` <character> and `mpg` <double>.
広告
References
- 【R前処理講座23】tidyr pivot系:縦横変換【tidyverse】. Link: Last access 2023/07/25.
コメント欄
サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。