R言語のtidyverseパッケージを用いて、group_by関数によりグループ分けした結果に対してsummary関数を適用する方法についてお伝えいたします。

ここでお伝えする方法は、tidyverseパッケージを用いる方法となりますので、tidyverseパッケージを読み込んでおきます。


> library(tidyverse)

サンプルデータ

サンプルデータは、Rに標準で搭載されているirisを用いることにします。
irisの構造は次になります。


> iris %>% str()

'data.frame':	150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

group_byにsummaryを適用するコード

group_by関数によりグループ分けした結果に対してsummary関数を適用するコードは以下になります。


> iris %>% group_nest(Species) %>% mutate(s = map(data, ~ summary(.))) %>% pull(s, Species)

$setosa
  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
 Min.   :4.300   Min.   :2.300   Min.   :1.000   Min.   :0.100  
 1st Qu.:4.800   1st Qu.:3.200   1st Qu.:1.400   1st Qu.:0.200  
 Median :5.000   Median :3.400   Median :1.500   Median :0.200  
 Mean   :5.006   Mean   :3.428   Mean   :1.462   Mean   :0.246  
 3rd Qu.:5.200   3rd Qu.:3.675   3rd Qu.:1.575   3rd Qu.:0.300  
 Max.   :5.800   Max.   :4.400   Max.   :1.900   Max.   :0.600  

$versicolor
  Sepal.Length    Sepal.Width     Petal.Length   Petal.Width   
 Min.   :4.900   Min.   :2.000   Min.   :3.00   Min.   :1.000  
 1st Qu.:5.600   1st Qu.:2.525   1st Qu.:4.00   1st Qu.:1.200  
 Median :5.900   Median :2.800   Median :4.35   Median :1.300  
 Mean   :5.936   Mean   :2.770   Mean   :4.26   Mean   :1.326  
 3rd Qu.:6.300   3rd Qu.:3.000   3rd Qu.:4.60   3rd Qu.:1.500  
 Max.   :7.000   Max.   :3.400   Max.   :5.10   Max.   :1.800  

$virginica
  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
 Min.   :4.900   Min.   :2.200   Min.   :4.500   Min.   :1.400  
 1st Qu.:6.225   1st Qu.:2.800   1st Qu.:5.100   1st Qu.:1.800  
 Median :6.500   Median :3.000   Median :5.550   Median :2.000  
 Mean   :6.588   Mean   :2.974   Mean   :5.552   Mean   :2.026  
 3rd Qu.:6.900   3rd Qu.:3.175   3rd Qu.:5.875   3rd Qu.:2.300  
 Max.   :7.900   Max.   :3.800   Max.   :6.900   Max.   :2.500  

コードを簡単に説明します。

group_nest関数は、与えれた引数の列の値ごとに、与えられた引数の列以外をリストにまとめます。
デフォルトでは、data列としてまとめられます。

mutate関数により新たにsという列を追加します。

sという列は、group_nest関数により作成されたdata列に対してsummary関数を適用し、その結果を保持します。

pull関数によりs列を抽出し、このときの名前を与えています。
ここでは、Species列の各値になります。

まとめ

group_by関数によりグループ分けした結果に対してsummary関数を適用する方法についてお伝えしました。

今回お伝えした方法の利点は、手早く確認できる点です。
普通に考えられる方法としては、summarise関数内でmin関数やmax関数などを記載する方法ですが、これではキーのタイプ量が増えてしまいますし、numeric型とfactor型が列にある場合は同一の処理で記載することは困難です。
その点、今回の方法は、キーのタイプ量がそれほど多くなく、列の型を意識することもないので、かなりお手軽に確認できると思います。

逆に、今回お伝えした方法の欠点は、summary関数の結果を再利用できない点です。
今回お伝えした方法は、表示のみです。
そのため、summary関数の結果をさらにデータフレームとして用いることはやや困難です。
summary関数の結果を再利用する必要があるときには、素直にsummarise関数を用いた方法を用いるのが良いと思います。

関連する記事

  • UbuntuでGENEONTOLOGYのgo.oboをjson形式に変換する方法UbuntuでGENEONTOLOGYのgo.oboをjson形式に変換する方法 title: UbuntuでGENEONTOLOGYのgo.oboをjson形式に変換する方法 url: how-to-convert-geneontology-obo-to-json-on-ubuntu GENEONTOLOGYのgo.oboをjson形式に変換する方法をお伝えします。 環境 今回の環境を確認しておきます。 $ cat […]
  • R言語 CRAN Task ViewsR言語 CRAN Task Views CRANに登録されているパッケージ数は膨大です。そこで、いくつかのグループにパッケージを分類し整理されたCRAN Tack Views というサイトがあります。ここでは、英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載しました。 Bayesian(日本語訳) Bayesian […]
  • R言語 CRAN Task View:社会科学の統計R言語 CRAN Task View:社会科学の統計 CRAN Task View: Statistics for the Social Sciencesの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載しました。 Maintainer: John Fox Contact: jfox at […]
  • R 文字列の行を指定した幅で強制的に折り返す方法R 文字列の行を指定した幅で強制的に折り返す方法 R […]
  • これだけは抑えておきたい収益性分析の基本これだけは抑えておきたい収益性分析の基本 収益性分析とは、主に損益起算書上の数値から収益獲得力や投資効率性を測定する分析である。企業が継続的発展を遂げるためには利益確保が欠かせないが、企業経営は好調のときもあれば不調のときもあるため、様々な観点から収益または利益の状況を把握する必要がある。 ここでは、収益性分析の代表的な指標をいくつか紹介する。 これらの代表的な指標を活用するに当たっては、業種によってかなり異 […]
R group_byにsummaryを適用する方法