169  シンプルな書き方での演算(dplyr::summarise)

library(tidyverse)

dat <- tibble(
  num = 1:10,
  fac2 = rep(c("a","b"), 5),
  fac3 = rep(c("A","B","C"), 4)[1:10]
)

方法2: DplyrのSummarise関数

実はDplyrには、attachと似たように利用できるsummarise関数というものがあります。

単純集計やグループ集計を行う場合に必須の関数になるため、単独での動きをしっかりと理解しておきましょう。

dat %>% 
  summarise(
    kosu  = length(num),
    mean1 = sum(num)/length(num),
    mean2 = mean(num)
  )
# A tibble: 1 × 3
   kosu mean1 mean2
  <int> <dbl> <dbl>
1    10   5.5   5.5

だいぶattachと挙動が違いますがじっくりとみてみましょう

datというデータを%>%でsummariseに与えてあげると、summariseの中では列名を書くだけでそのベクトルを利用することができます

summarieの中で、<新しい列名>=<ベクトル演算>とすることで、その列名にベクトルの演算結果がでてきます。

length(dat$num)
[1] 10
sum(dat$num)/length(dat$num)
[1] 5.5
mean(dat$num)
[1] 5.5

これらの結果と、

dat %>% 
  summarise(
    kosu  = length(num),
    mean1 = sum(num)/length(num),
    mean2 = mean(num)
  )
# A tibble: 1 × 3
   kosu mean1 mean2
  <int> <dbl> <dbl>
1    10   5.5   5.5
library(tidyverse)

この動作、同じ結果ですね?

このスクリプトの動作、腹落ちしましたか?

この書き方の利点は、numという名前の変数がグローバル環境にあったとしても、問題なく意図した動作をしてくれるというところにあります。

Environmentペーンを確認いただきたいのですが、ここまでのsummarise関数の実行時に、numという変数が存在している状態でした。しかし、それには影響を受けずに、与えられたデータ/tibbleの列名がついたベクトルを取り出すことができています。この特徴があるため、attachを使うよりも思わぬエラーが回避できると思います。

また、summarise関数の中でだけ動作する特別な関数もあるので次の動画ではその説明を行います。