第5章 tidyverse(dplyr)で再現 ・ ノック 80 / 100 ・ [[000 - はじめに(使い方と目次)|目次]]<br>
← 前 [[079 - 二つの表をつなぐ]] ・ 次 → [[081 - 散布図を描く]]
> [!info] pivot_longer() は横長の表を縦長に変形する関数です
> データには「**横長(wide)形式**」と「**縦長(long)形式**」の2種類があります。`iris` の場合、Sepal.Length・Sepal.Width・Petal.Length・Petal.Width という4列が横に並んでいるのが横長形式です。**`pivot_longer()`**(ピボットロンガー)はこれを「部位名」と「計測値」の2列にまとめた縦長形式に変換する関数です。
>
> 縦長形式は `ggplot2` でのグラフ作成や統計モデルへの投入に適しています。引数の `cols` で縦長にしたい列を指定し、`names_to` に列名を格納する新しい列名、`values_to` に値を格納する新しい列名を書きます。逆に縦長から横長に戻す関数は `pivot_wider()`(ピボットワイダー)です。
## 問題
`iris` の `Sepal.Length` から `Petal.Width` までの4列を `pivot_longer()` で縦長に変形し、先頭4行を表示してみましょう。
> [!tip] ヒント
> `pivot_longer(cols = Sepal.Length:Petal.Width, names_to = "部位", values_to = "計測値")` の形で書きます。`cols` に縦長にしたい列の範囲を指定します。
> [!success]- 回答を見る
> ```r
> library(dplyr)
> library(tidyr)
> iris %>%
> pivot_longer(cols = Sepal.Length:Petal.Width,
> names_to = "部位",
> values_to = "計測値") %>%
> head(4)
> ```
> ```
> # A tibble: 4 × 3
> Species 部位 計測値
> <fct> <chr> <dbl>
> 1 setosa Sepal.Length 5.1
> 2 setosa Sepal.Width 3.5
> 3 setosa Petal.Length 1.4
> 4 setosa Petal.Width 0.2
> ```
> Rベースには同等の簡単な関数がなく、`reshape()` や `stack()` が必要でしたが、`pivot_longer()` で直感的に書けます。逆に縦長から横長に戻したいときは `pivot_wider()` を使います。