第5章 tidyverse(dplyr)で再現 ・ ノック 68 / 100 ・ [[000 - はじめに(使い方と目次)|目次]]<br>
← 前 [[067 - 要約する]] ・ 次 → [[069 - パイプ %>% でつなぐ]]
> [!info] group_by() でグループを指定してから summarise() すると層別集計ができます
> `group_by()`(グループバイ)は「この列でグループ分けして処理してください」と宣言する動詞です。単体では見た目が変わりませんが、その後に `summarise()` を続けると、グループごとに集計した結果が返ってきます。
>
> Rベースでは `tapply(iris$Sepal.Length, iris$Species, mean)` のように書いていました。dplyrでは `group_by()` と `summarise()` を `%>%`(パイプ、次のノックで詳しく説明します)でつなぐことで、「グループ分け → 集計」という流れをそのまま読める形で書けます。
## 問題
`iris` を Species ごとにグループ分けし、Sepal.Length の平均値をグループごとに求めてみましょう。
> [!tip] ヒント
> `group_by(iris, Species)` でグループを指定し、`%>%` でつないで `summarise()` を続けます。
> [!success]- 回答を見る
> ```r
> library(dplyr)
> iris %>%
> group_by(Species) %>%
> summarise(mean_sl = mean(Sepal.Length))
> ```
> ```
> # A tibble: 3 × 2
> Species mean_sl
> <fct> <dbl>
> 1 setosa 5.01
> 2 versicolor 5.94
> 3 virginica 6.59
> ```
> Rベースでは `tapply(iris$Sepal.Length, iris$Species, mean)` と書いていましたが、`group_by() %>% summarise()` の組み合わせで同じ結果をデータフレーム形式で得られます。