【初心者向け:R】データをグループ毎に集計するには?group_by()とsummarise()の使い方を徹底解説【tidyverse推奨】

  • URLをコピーしました!

こんにちは。ほしのはやしです。

統計を考えるときに、複数の観測値をグループごとに集計することがよくあります。
たとえば、「地域ごとの売上合計」や「性別ごとの平均年齢」など。
そんなときに大活躍するのが、tidyverseのパッケージに含まれるdplyrの group_by()summarise() です。

この記事では、初心者でも理解できるように、基本的な使い方をわかりやすく解説していきます!

目次

グループ毎での合計を求める

まずは以下のコードで練習用のテーブルを作成します!

library(tidyverse)

# 架空の売上データを作成
sales_data <- tibble(
  store = c("Tokyo", "Osaka", "Tokyo", "Osaka", "Nagoya", "Tokyo"),
  staff = c("A", "B", "C", "D", "E", "F"),
  sales = c(100, 150, 120, 130, 90, 110)
)

sales_data

以下のコードでグループ毎に合計の値を算出します。

sales_data %>%
  group_by(store) %>%
  summarise(total_sales = sum(sales))

このように、『%>%』(パイプ演算子)を使うことで、データシートグループ化(group_by)して要約する(summarise)、という表現になります。

もし表にNAがある場合はエラーが出ますので、下記のページを参考にNAを処理してから集計処理を行ってください!

グループ毎での平均・標準偏差・95%信頼区間など求める

続いて、統計に必要な平均値などの数値をグループ毎に出す方法についてご紹介します。

library(tidyverse)

sales_data %>%
  group_by(store) %>%
  summarise(
    count = n(), # N数の表示とN数をcountと名付ける
    total_sales = sum(sales), # 合計の表示
    avg_sales = mean(sales), # 平均の表示
    sd_sales = sd(sales), # 標準偏差の表示
    se_sales = sd_sales / sqrt(count), # 標準誤差の表示
    ci_lower = avg_sales - 1.96 * se_sales, # 95%CI下限の表示
    ci_upper = avg_sales + 1.96 * se_sales # 95%CI上限の表示
  )

コードを解説します。

同じように%>%をつかって、sales_dataテーブルから、store列の内容に従ってグループ分け(group_by)します。

summariseで、必要な項目を計算して表示します。
sum(), mean(), sd()の中身は計算したい数値のある列なのでsales列を入れています。
sqrt()は平方根変換のことで、count、すなわちN数を平方根変換しています。

もしcount = n()を抜く場合は、sqrt(n())のように表記してください。

複数列で一括に集計したい場合は下記のページをご覧ください!

星柴くん

グループ化とデータの要約の方法がわかったね!

黒星柴くん

要約統計をすることで外観がつかみやすくなるのええでな!

まとめ

統計の基本であるグループ化と数値の計算についてご説明しました!
特にtidyverseはテーブル処理で必須のパッケージですので、必ずインストールするのをおすすめします!!

皆様のお役に立てたなら幸いです。

  • URLをコピーしました!

この記事を書いた人

柴犬をこよなく愛する読書家。
街歩きとお菓子作りを趣味にしています。
研究や論文に役立つ情報をわかりやすくお伝えします。

コメント

コメントする

目次