第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()` を使います。