第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()` の組み合わせで同じ結果をデータフレーム形式で得られます。