dplyr::distinct
dplyr::distinct
は、tidyverse コレクションの dplyr パッケージに含まれる関数で、データフレームから重複する行を取り除き、ユニークな行のみを残すために使用される。
base::unique
と似たような処理を行うが、dplyr::distinct
の方が高速に動作する。
クイックリファレンス
library(tidyverse)
df %>%
distinct(col1, col2, ...)
penguins %>%
distinct(species, island)
# # A tibble: 5 × 2
# species island
# <fct> <fct>
# 1 Adelie Torgersen
# 2 Adelie Biscoe
# 3 Adelie Dream
# 4 Gentoo Biscoe
# 5 Chinstrap Dream
基本構文
distinct(.data, ..., .keep_all = FALSE)
引数 | 説明 |
---|---|
.data | データフレーム(または tibble)。 |
... | ユニークな値を留める基準となる列。 |
.keep_all = FALSE | TRUE に設定すると、指定した列とともに重複していない行のすべての列を保持する。 |
使用例
1. 全ての列に対する重複の排除
デフォルトの動作は、すべての列にわたる重複の排除である。
penguins %>%
distinct()
# # A tibble: 344 × 7
# species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex
# <fct> <fct> <dbl> <dbl> <int> <int> <fct>
# 1 Adelie Torgersen 39.1 18.7 181 3750 male
# 2 Adelie Torgersen 39.5 17.4 186 3800 female
# 3 Adelie Torgersen 40.3 18 195 3250 female
# 4 Adelie Torgersen NA NA NA NA NA
# 5 Adelie Torgersen 36.7 19.3 193 3450 female
# 6 Adelie Torgersen 39.3 20.6 190 3650 male
# 7 Adelie Torgersen 38.9 17.8 181 3625 female
# 8 Adelie Torgersen 39.2 19.6 195 4675 male
# 9 Adelie Torgersen 34.1 18.1 193 3475 NA
# 10 Adelie Torgersen 42 20.2 190 4250 NA
# # ℹ 334 more rows
# # ℹ Use `print(n = ...)` to see more rows
2. 特定の列を基準に重複の排除
特定の列を基準に重複の排除を行いたい場合には、その列名を引数として渡す。
penguins %>%
distinct(species)
# # A tibble: 3 × 1
# species
# <fct>
# 1 Adelie
# 2 Gentoo
# 3 Chinstrap
3. 重複排除後、全ての列のデータを保持
重複排除を行った結果、全ての列のデータを保持したい場合は .keep_all
パラメータを TRUE
に設定する。
このとき、指定された列でユニークな値を持つ最初 に出現した行が保持される。
penguins %>%
distinct(species, .keep_all = TRUE)
# # A tibble: 3 × 7
# species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex
# <fct> <fct> <dbl> <dbl> <int> <int> <fct>
# 1 Adelie Torgersen 39.1 18.7 181 3750 male
# 2 Gentoo Biscoe 46.1 13.2 211 4500 female
# 3 Chinstrap Dream 46.5 17.9 192 3500 female