[`dplyr::distinct()`](https://dplyr.tidyverse.org/reference/distinct.html) は、データフレームから重複行を除去する関数である。特定の列を指定して重複判定を行うことも、全ての列を対象とした重複判定も可能で、データクリーニングや探索的データ分析において頻繁に使用される。
```r
# サンプルデータに重複行を追加
penguins_with_duplicates <- penguins |>
slice(1:5) |>
bind_rows(slice(penguins, 1:2)) # 最初の2行を重複として追加
penguins_with_duplicates
```
```
# A tibble: 7 × 8
species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex year
<fct> <fct> <dbl> <dbl> <int> <int> <fct> <int>
1 Adelie Torgersen 39.1 18.7 181 3750 male 2007
2 Adelie Torgersen 39.5 17.4 186 3800 female 2007
3 Adelie Torgersen 40.3 18 195 3250 female 2007
4 Adelie Torgersen NA NA NA NA NA 2007
5 Adelie Torgersen 36.7 19.3 193 3450 female 2007
6 Adelie Torgersen 39.1 18.7 181 3750 male 2007
7 Adelie Torgersen 39.5 17.4 186 3800 female 2007
```
## 全列を対象とした重複行の削除
`dplyr::distinct()` は引数を指定しない場合、完全に同一の行を削除する。
```r
penguins_with_duplicates |>
distinct()
```
```
# A tibble: 5 × 8
species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex year
<fct> <fct> <dbl> <dbl> <int> <int> <fct> <int>
1 Adelie Torgersen 39.1 18.7 181 3750 male 2007
2 Adelie Torgersen 39.5 17.4 186 3800 female 2007
3 Adelie Torgersen 40.3 18 195 3250 female 2007
4 Adelie Torgersen NA NA NA NA NA 2007
5 Adelie Torgersen 36.7 19.3 193 3450 female 2007
```
## 特定列を対象とした重複行の除去
`dplyr::distinct()` は列名を指定することで、その列の値が同じ行を重複とみなして除去できる。複数列を指定した場合は、それらの組み合わせで重複判定が行われる。
```r
penguins_with_duplicates |>
distinct(species, sex)
```
```
# A tibble: 3 × 2
species sex
<fct> <fct>
1 Adelie male
2 Adelie female
3 Adelie NA
```
> [!note]
> `dplyr::distinct()` は欠損値も値として扱うため、欠損値を含む行も適切に重複判定される。
## 関連ノート
なし