Skip to main content

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 = FALSETRUE に設定すると、指定した列とともに重複していない行のすべての列を保持する。

使用例

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