【初心者向け:R】複数の列を一括で集計するには?across()の使い方をわかりやすく解説【tidyverse推奨】

  • URLをコピーしました!

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

Rで複数の列に対して「平均」や「標準偏差」などを一括で計算したいとき、tidyverseパッケージに入っているacross()がとても便利です。

この記事では、初心者でも使いやすいacross()の基本と応用を、具体的なコード付きでやさしく解説します。

group_byとsummariseの使い方が基本になりますので、下記ページも参考にしてください!

目次

基本の使い方:across()で平均をまとめて出す

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

library(tidyverse)

# 架空の売上データを作成
set.seed(123)
sales_data <- tibble(
  store = rep(c("A", "B", "C"), each = 5),
  sales = sample(100:200, 15),
  profit = sample(20:50, 15),
  customers = sample(50:100, 15)
)

以下のコードでグループ毎に複数の列で統計を算出します。

sales_data %>%
  group_by(store) %>%
  summarise(
    across(c(sales, profit, customers), mean, .names = "{.col}_mean")
  )

【解説】
.names =:出力列の名前を指定。{.col}は列名、{.fn}は関数名。
group_by(store):店舗ごとに集計
across(...):複数列に同じ関数(ここではmean)を適用

acrossの中の説明について、もう少し噛み砕いてテーブルにします。

パーツ意味
c(sales, profit, customers)「sales」「profit」「customers」の3つの列を対象にする
meanそれぞれの列に対して平均(mean)を計算する
.names = "{.col}_mean"出力列の名前を sales_meanprofit_mean のようにする

基本的には以下のように考えればOKです!

across(解析したい列名, データの計算方法, 計算結果を入れる新しい列名)

応用:標準偏差、標準誤差、件数をまとめて出す

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

library(tidyverse)

sales_data %>%
  group_by(store) %>%
  summarise(
    across(c(sales, profit, customers), # 解析する列を選択
           list(
             mean = mean,
             sd = sd,
             se = ~sd(.) / sqrt(length(.)),
             ci_low = ~mean(.) - 1.96 * sd(.) / sqrt(length(.)),
             ci_high = ~mean(.) + 1.96 * sd(.) / sqrt(length(.))
           ),
           .names = "{.col}_{.fn}"),
    count = n()
  )

コードを解説します。

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

summariseで、必要な項目を計算して表示します。

acrossの内容では、まずc(sales, profit, customers)で計算する列名を選択します。
その後計算するための関数をlistでまとめて入力します(ここはコピペでOK!)

.names = “{.col}_{.fn}”)で、計算結果を入れる列名を自動で、
計算元の列名_計算で使った関数
と表記するように指示しています。

文字列や日付列がまじ買っている場合は、エラーが出ますので要注意!

星柴くん

複数の列を一気に要約する方法がわかったね!

黒星柴くん

複数に関数(計算)を適応するときはacrossが便利やでな!

まとめ

グループ化して複数の列を一気に要約統計する方法についてご説明しました!
特にtidyverseはテーブル処理で必須のパッケージですので、必ずインストールするのをおすすめします!!

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

  • URLをコピーしました!

この記事を書いた人

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

コメント

コメントする

目次