R の pivot_longer 関数: データフレームの縦長、横長を変換する

UBC/informatics/r/pivot

このページの最終更新日: 2024/04/23

  1. 概要: pivot() 系の関数とは
  2. pivot_longer() 関数の使い方

このページが長くなったので、pivot_wider() は別のページに移しました。以下のリンクからどうぞ。


広告

pivot() 系の関数とは

pivot() 系の関数には、pivot_longer() および pivot_wider() が含まれ、それぞれデータを縦長、横長に変換する。

ggplot2 のインプットが縦長のデータフレームなので、これを使う場合に pivot() 関数で前処理することが多い。

pivot_longer() 関数の使い方

組み込みデータセット の mtcars を使ってみる。このデータは、以下のように車の種類が行に、mpg (マイル/ガロン、燃費の指標)、hp (馬力 horse power) などが列になっている。

Rの組み込みデータセット mtcars

これは、このページで説明しているところの 横長データ であり、まずはこれを以下のような形の縦長データに変換してみる。

Mazda RX4 mpg 21.0
Mazda RX4 Wag mpg 21.0
Datsun 710 mpg 22.8
以下略

pivot_longer() の基本的な syntax は以下の通り。cols で指定した列の名前が names_to の列へ行き、値が values_to の列へ行く。

pivot_longer(データ, cols = c("含めるカラム"), names_to = "名前の列名", values_to = "値の列名")

1 つのパラメーターを指定

具体例を見てみよう。mpg のみに興味がある場合、cyl などの余計な列は予め除いておく。

# mpg のみを選択し、データフレームの行名になっている車の名前を car という列に移す
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")

Rの組み込みデータセット mtcars pivot_longer関数

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 でソートしているようだ。

mtcars2 <- select(mtcars, mpg, cyl) %>% tibble::rownames_to_column(var = "car")

# pivot_longer で変換する
Long2 <- pivot_longer(mtcars2, cols = c("mpg", "cyl"), names_to = "parameter", values_to = "value")

Rの組み込みデータセット mtcars pivot_longer関数

全てのパラメーターを指定

全てのパラメーターを含めたい場合は、次のようになる。

Rの組み込みデータセット mtcars pivot_longer関数

ここで注意するのは、対象とする列を指定しているベクター 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

  1. 【R前処理講座23】tidyr pivot系:縦横変換【tidyverse】. Link: Last access 2023/07/25.

コメント欄

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