Skip to main content

dplyr::summarise

dplyr::summarise は、tidyverse コレクションの dplyr パッケージに含まれる関数で、データフレームのサブセットに対する統計の集約や要約を行うために使用される。

クイックリファレンス

library(tidyverse)

df %>%
group_by(col1, col2, ...) %>%
summarise(
mean_value = mean(numeric_column),
std_value = sd(numeric_column),
n = n(),
)
penguins %>%
group_by(species) %>%
summarise(
avg_body_mass = mean(body_mass_g, na.rm = TRUE),
n = n(),
)

# # A tibble: 3 × 3
# species avg_body_mass n
# <fct> <dbl> <int>
# 1 Adelie 3701. 152
# 2 Chinstrap 3733. 68
# 3 Gentoo 5076. 124

基本構文

summarise(
.data,
...,
.by = NULL,
.groups = c("drop_last", "drop", "keep", "rowwise")
)
引数説明
.dataデータフレーム(または tibble)。
...計算する要約統計の式。
.by = NULLグループ化したい列を指定する。<tidy-select> も指定可能。
.groups = "drop_last"グループ化されたデータフレームでのグループ処理の方式。
"drop_last" - グループの最後のレベルを解除する。
"drop" - グループを解除する。
"keep" - グループを維持する
"rowwise" - 各行を独自のグループとする。

使用例

1. グループ集計

penguins %>%
group_by(species, island) %>%
summarise(
avg_body_mass = mean(body_mass_g, na.rm = TRUE),
n = n(),
)

# # A tibble: 5 × 4
# # Groups: species [3]
# species island avg_body_mass n
# <fct> <fct> <dbl> <int>
# 1 Adelie Biscoe 3710. 44
# 2 Adelie Dream 3688. 56
# 3 Adelie Torgersen 3706. 52
# 4 Chinstrap Dream 3733. 68
# 5 Gentoo Biscoe 5076. 124

.by パラメータを使用すると、dplyr::group_by を省略できる。これは、dplyr::group_bydplyr::summarisedplyr::ungroup と同じ動作である。

penguins %>%
summarise(
avg_body_mass = mean(body_mass_g, na.rm = TRUE),
n = n(),
.by = c("species", "island")
)

# # A tibble: 5 × 4
# species island avg_body_mass n
# <fct> <fct> <dbl> <int>
# 1 Adelie Torgersen 3706. 52
# 2 Adelie Biscoe 3710. 44
# 3 Adelie Dream 3688. 56
# 4 Gentoo Biscoe 5076. 124
# 5 Chinstrap Dream 3733. 68
penguins %>%
group_by(species, island) %>%
summarise(
avg_body_mass = mean(body_mass_g, na.rm = TRUE),
n = n(),
) %>%
ungroup()

# # A tibble: 5 × 4
# species island avg_body_mass n
# <fct> <fct> <dbl> <int>
# 1 Adelie Torgersen 3706. 52
# 2 Adelie Biscoe 3710. 44
# 3 Adelie Dream 3688. 56
# 4 Gentoo Biscoe 5076. 124
# 5 Chinstrap Dream 3733. 68

2. 単一の列に対する要約統計

penguins %>%
summarise(
mean = mean(body_mass_g, na.rm = TRUE),
sd = sd(body_mass_g, na.rm = TRUE),
n = n(),
n_distinct = n_distinct(body_mass_g, na.rm = TRUE),
min = min(body_mass_g, na.rm = TRUE),
q1 = quantile(body_mass_g, 0.25, na.rm = TRUE),
median = median(body_mass_g, na.rm = TRUE),
q3 = quantile(body_mass_g, 0.75, na.rm = TRUE),
max = max(body_mass_g, na.rm = TRUE),
)

# # A tibble: 1 × 9
# mean sd n n_distinct min q1 median q3 max
# <dbl> <dbl> <int> <int> <int> <dbl> <dbl> <dbl> <int>
# 1 4202. 802. 344 94 2700 3550 4050 4750 6300