[`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()` は欠損値も値として扱うため、欠損値を含む行も適切に重複判定される。 ## 関連ノート なし