tidyverse – distinct関数でデータフレームの重複行を削除 dplyrパッケージ

tidyverseでデータフレームの重複行の削除を行う場合、dplyrパッケージのdistinct関数を使います。重複をチェックする列名を指定し、重複が見つかった行は最初に見つかったデータを残して、それ以外は削除されます。Rの標準的な操作なら、duplicated関数が同じように使えます。

重複行を削除する

dplyrパッケージのdistinct関数を使えば、データフレームから重複した行を初出以外は取り除くことができます。重複をチェックする列を指定します。tidyverseパッケージをロードすると使えるようになります。

書式

distinct関数は、第1引数にデータ、第2引数以降に重複チェックする列名を指定します。重複チェックの列は複数指定できます。オプションで、抽出が「重複した列のみ」か「重複した項目を含む行全体」かを指定できます。尚、パイプ(%>%)を使って連続的に処理を記述する場合は、第1引数のデータは省略することができます。

> distinct(データ, 重複チェック列名, オプション)

> データ %>% distinct(重複チェック列名, オプション)

重複チェックとそれ以外の情報の扱い

重複情報のみ

distinct関数に「重複チェック列」のみを指定して、重複情報のみを取得しています。指定した列は、「Species」で、重複した列・行の初出の情報のみ得られています。

 1: > iris %>% head
 2:   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
 3: 1          5.1         3.5          1.4         0.2  setosa
 4: 2          4.9         3.0          1.4         0.2  setosa
 5: 3          4.7         3.2          1.3         0.2  setosa
 6: 4          4.6         3.1          1.5         0.2  setosa
 7: 5          5.0         3.6          1.4         0.2  setosa
 8: 6          5.4         3.9          1.7         0.4  setosa
 9: > iris %>% distinct(Species)
10:      Species
11: 1     setosa
12: 2 versicolor
13: 3  virginica

重複情報を含む行全体

distinct関数に「重複チェック列」と「行全体を返す」オプション指定して、重複情報を含む行を取得しています。指定した列は、「Species」で、重複した列・行の初出の情報のみ得られています。

1: > iris %>% distinct(Species, .keep_all=T)
2:   Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
3: 1          5.1         3.5          1.4         0.2     setosa
4: 2          7.0         3.2          4.7         1.4 versicolor
5: 3          6.3         3.3          6.0         2.5  virginica

重複列を複数

distinct関数に「重複チェック列(複数)」と「行全体を返す」オプション指定して、重複情報を含む行を取得しています。指定した列は、「Species, Petal.Width」で、2つの情報の組み合わせで重複した列・行の初出の情報のみ得られています。

 1: > iris %>% distinct(Species, Petal.Width, .keep_all=T)
 2:    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
 3: 1           5.1         3.5          1.4         0.2     setosa
 4: 2           5.4         3.9          1.7         0.4     setosa
 5: 3           4.6         3.4          1.4         0.3     setosa
 6: 4           4.9         3.1          1.5         0.1     setosa
 7: 5           5.1         3.3          1.7         0.5     setosa
 8: 6           5.0         3.5          1.6         0.6     setosa
 9: 7           7.0         3.2          4.7         1.4 versicolor
10: 8           6.4         3.2          4.5         1.5 versicolor
11: 9           5.5         2.3          4.0         1.3 versicolor
12: ...

Rの標準的な操作

データフレームに対して重複行の削除を行う場合、Rの標準的な方法ではduplicated関数を使います。データフレーム([行,列])の行にduplicated関数(重複行以外=ユニークな行の場合は、!duplicatedの評価とする)を指定します。duplicated関数には、重複チェックを行う列名を指定します。複数列で重複チェックをする場合は、データフレームを渡します。

1: > iris[!duplicated(iris$Species),]
2:     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
3: 1            5.1         3.5          1.4         0.2     setosa
4: 51           7.0         3.2          4.7         1.4 versicolor
5: 101          6.3         3.3          6.0         2.5  virginica
 1: > iris[!duplicated(iris[,c(4,5)]),]
 2:     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
 3: 1            5.1         3.5          1.4         0.2     setosa
 4: 6            5.4         3.9          1.7         0.4     setosa
 5: 7            4.6         3.4          1.4         0.3     setosa
 6: 10           4.9         3.1          1.5         0.1     setosa
 7: 24           5.1         3.3          1.7         0.5     setosa
 8: 44           5.0         3.5          1.6         0.6     setosa
 9: 51           7.0         3.2          4.7         1.4 versicolor
10: 52           6.4         3.2          4.5         1.5 versicolor
11: 54           5.5         2.3          4.0         1.3 versicolor
12: ...
13: # distinct(iris, Species, Petal.Width, .keep_all=T) と同じ

まとめ

  • tidyverseでデータフレームの重複行の削除を行う場合、dplyrパッケージのdistinct関数を使う。
  • 重複チェックする列名を指定し、重複が見つかった行は初出を残して、それ以外は削除される。複数の列で重複チェックできる。
  • 重複チェックでは、「重複情報のみ」か「重複を含む行」の抽出かをオプションで指定できる。
  • Rの標準的な操作なら、duplicated関数で同じように重複チェックが可能。



ピックアップ記事

  1. awk split サンプルでわかる列の分割とセパレータ(文字・正規表現)の指定方法

    awkのsplit関数は、セパレータを指定して文字列を分割することができます。セパレータには文字や…
  2. tidyverse – distinct関数でデータフレームの重複行を削除 dplyrパッケージ

    tidyverseでデータフレームの重複行の削除を行う場合、dplyrパッケージのdistinct…
  3. R plot 重ねる方法3パターン サンプルでわかるRの使い方

    Rでグラフ (plot) を重ねる方法は、「単純な追加」「図に重ねて描画」「濃淡で重なり表現」の3…

人気記事

  1. Excel, その他, 統計

    z-score 計算方法 エクセル(Excel) 編
    統計処理で、大きく変化しているなどの判断基準にも使われる値…
  2. R データ型 - 文字列・ベクター・データフレーム・マトリックス など-, R言語, スクリプト

    R subset関数 データフレームやmatrixからの条件指定による行・列の抽出
    R の subset関数は、データフレームやマトリックスか…
  3. IGV, 解析ツール

    IGV 使い方 インストール〜便利な使い方まで | リファレンス・マッピングデータ・アノテーションを読み込んで表示しよう
    IGV(Integrative Genomics View…

おすすめ記事

  1. awk, bash 文字列操作, シェルスクリプト

    bash 部分文字列・置換・長さ・連結・分割の文字列処理
    bashのよく使う文字列処理、部分文字列・置換・連結・長さ…
  2. bash 応用, シェルスクリプト

    シェル スクリプト ファイル存在チェック・空のファイルチェック
    bashでスクリプトを作成するときに、よく使うのがファイル…
  3. R言語, グラフ

    R 使い方 軸・ラベルの調整(向き・サイズ・色など) グラフの描き方
    Rによるplot(グラフ)の描画は、手軽で大変便利です。た…