いずにゃんの研究日記

専門性を広げるための練習場

はじめてのdplyr(2):平均値を算出しデータセットに追加,層別の計算も

前回の

izunyan.hatenablog.com

の続きを解説する。サンプルデータは上記記事を参照。

まずは,単純に身長の平均値をheightmという名前で作成してみる。 チートシートでは,"Summarise Data"の部分。

dat %>% summarise(heightm=mean(height))
   heightm
1 158.1111


算出した平均値を変数としてデータセットに追加する

算出した値を新たに変数として付け加えたい場合は,mutate( )を使う。 チートシートでは,"Make New Variables"の部分。

dat %>% mutate(heightm=mean(height))
        name grade height  B  W  H  heightm
1   高海千歌     2    157 82 59 83 158.1111
2   桜内梨子     2    160 80 58 82 158.1111
3   松浦果南     3    162 83 58 84 158.1111
4 黒澤ダイヤ     3    162 80 57 80 158.1111
5     渡辺曜     2    157 82 57 81 158.1111
6   津島善子     1    156 79 58 80 158.1111
7 国木田花丸     1    152 83 57 83 158.1111
8   小原鞠莉     3    163 87 60 84 158.1111
9 黒澤ルビィ     1    154 76 56 79 158.1111


層別・グループ別に計算

group_by( )を使うと,層・グループ別に処理が行える。そして,ここで %>%演算子の真価が発揮される。学年ごとに身長を出してみる場合は次のようになる。チートシートでは,"Group Data"の部分。

dat %>% group_by(grade) %>% summarise(heightm=mean(height))
# A tibble: 3 × 2
  grade  heightm
  <dbl>    <dbl>
1     1 154.0000
2     2 158.0000
3     3 162.3333

これらの平均値をデータセットに変数として追加したい場合は 次のようにする。

dat %>% group_by(grade) %>% mutate(heightm=mean(height))
        name grade height     B     W     H  heightm
      <fctr> <dbl>  <dbl> <dbl> <dbl> <dbl>    <dbl>
1   高海千歌     2    157    82    59    83 158.0000
2   桜内梨子     2    160    80    58    82 158.0000
3   松浦果南     3    162    83    58    84 162.3333
4 黒澤ダイヤ     3    162    80    57    80 162.3333
5     渡辺曜     2    157    82    57    81 158.0000
6   津島善子     1    156    79    58    80 154.0000
7 国木田花丸     1    152    83    57    83 154.0000
8   小原鞠莉     3    163    87    60    84 162.3333
9 黒澤ルビィ     1    154    76    56    79 154.0000


層別・グループ別にすべての変数の平均値を算出

このように,%>%は複数の関数をつなげて実行してくれる。1行に並べて書くと長くなるので,%>%の後で改行して複数行に渡り書くこともできる。今まで解説してきた内容に加え,新しくすべての変数に対する処理を行うsummarise_each( )を使い,学年ごとに身長とスリーサイズの平均値を一気に算出するコードを書いてみる。

dat %>% group_by(grade) %>%
        select(-name, -grade) %>%
        summarise_all(funs(mean))
# A tibble: 3 × 5
  grade   height        B        W        H
  <dbl>    <dbl>    <dbl>    <dbl>    <dbl>
1     1 154.0000 79.33333 57.00000 80.66667
2     2 158.0000 81.33333 58.00000 82.00000
3     3 162.3333 83.33333 58.33333 82.66667

名前と学年は平均値を出しても意味がないので,select( )で省いている



変更履歴

2016/12/26 誤字修正
2017/07/09 チートシートの部分を打ち消し;summarise_eachがdeprecatedになったのでsummarise_allに変更