DS講座 tidyverse tidyverse講座

【R前処理講座19】{dplyr} group_by:グルーピング【tidyverse】

こんにちは,shun(@datasciencemore)です!

今回はグルーピングについてやっていきます.
グルーピングって聞くだけでなんとなく何をするかわかると思います.
要は,データフレーム全体ではなく,各分類ごとにデータを見るってことです.

どんな感じなのか,さっそく見ていきましょう.

0.グルーピングってなに??

グルーピングって何ですか?
グルーピングっていうのは,データを特定の条件でまとめることだよ.

データを処理する際,ある特定の条件でまとめて,それぞれで処理するということは頻出です.
それでは,具体例を交えて説明していきますね.

1.基本

例えば次のような例を考えてみましょう.

今,とある高校の1学年あたりのデータフレームがあるとします.
そのデータには,クラス(= class),性別( = gender),身長( = height)があります.

 

さて,クラスごとに生徒の身長の平均を求めたい場合はどうすればいいでしょうか?

えーと,

①クラスごとにデータフレームを分割する.

②分割したデータフレームごとに身長を平均する.

とすればいけそうね.

はい,その通りです!
これらの処理は,それぞれ,group_byとsummariseという関数によって実現できます.

①クラスごとにデータフレームを分割する.= group_by
②分割したデータフレームごとに身長を平均する.= summarise

を使用することで簡単に処理することができます.

イメージはこんな感じです.

 

これをRで書くと,このようになります.

うまくできましたね.
これがgroup_byの基本になります.

2.グルーピングの条件

先ほどはクラスをキーにしてグルーピングしましたが,グルーピングの条件は,2つ以上でもOKです.

例えば,クラスの男女別で身長の平均が知りたい場合は,以下のようにすればいいです.

クラスと性別の組み合わせは全部で6種類あるので,6行のデータフレームが出力されています. このような感じで,グルーピングしたい条件は単数でも複数でもOKです.

出力されたデータフレームをよく見ると# Groups: class [3]となっていますね. 実は,データフレームは,classでグルーピングされた状態で出力されます. 複数条件でgroup_byをして,summarizeすると,複数条件 - 1の条件で出力されるんですね. 今回の例でいうとclass, genderでグルーピングしていたので,出力されるデータフレームはgenderが取れてclassでグルーピングされた状態で出力されます. なんてややこしい... これを解除するには,以下のようにungroupを使用すればOKです.

グルーピングされているデータフレームとされていないデータフレームでは挙動が違うため,想定外のことが起こってしまう可能性があります.
細かいところなのですが,時々これでミスることがあるので念のため補足しました.

3.集計関数

先ほどはクラスごとの平均を計算しました.
もちろん,平均以外を算出することが可能です.
summariseでは,集計関数とよばれる基本統計量を算出する関数を主に使用します.

 

もちろんこれ以外も使えるのですが,95%くらいはこれらの関数を使用しています.
まずはこれらをマスターしましょう.
それでは,先ほどのデータを使用して,基本統計量を算出してみましょう.

ちゃんと出力されました.

指定した列名にNAがあるとエラーが出てしまいます
NAがあるときにそれを除いて,算出したい場合は,関数のオプションにna.rm = TRUEを付け加えればOKです.

まとめ

今回はグルーピングについて学習しました.

①条件ごとにデータフレームを分割する.= group_by
②分割したデータフレームごとに計算する.= summarise

とすることで,グルーピングしたグループごとに計算ができます.

計算に使用する関数は主に基本統計量(平均,標準偏差など)を算出するものです.

それじゃ,お疲れさまでした!!

 

 

-DS講座, tidyverse, tidyverse講座