はじめてのdplyr(2):平均値を算出しデータセットに追加,層別の計算も
前回の
の続きを解説する。サンプルデータは上記記事を参照。
まずは,単純に身長の平均値を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に変更