r 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関数で同じように重複チェックが可能。
スポンサーリンク

論文・データ解析の支援

個別に直接相談できるのが良いと、たくさんの方にご利用頂いています。

とにかく早く問題解決したい人はこちら>>直接、データ解析相談
とにかく早く問題解決したい人はこちら>>こちらで論文相談

関連記事

r tidyverse 使い方 | 列分割 separate関数 - tidyrパッケージ
tidyverseで1つの列(文字列型)を分割して別の列に分けるには、tidyrパッケージのseparate関数を使います。separate関数は、「指定した列」を「指定した区切り文字」で分割します。Rの標準的な操作strsplit関数を使...
r tidyverse 使い方 | 行 グループ毎の処理 group_by関数 - dplyrパッケージ
tidyverseでデータフレームをグループ別に処理する場合、dplyrパッケージのgroup_by関数を使います。group_by関数以降の処理では、グループ毎に計算が行われます。Rの標準的な操作なら、apply系関数を使って同じような処...
r tidyverse 使い方 | 列の追加 mutate関数 - dplyrパッケージ
tidyverseでデータフレームに列を追加する場合は、dplyrパッケージのmutate関数を使います。新しい列を追加したり、既にある列に上書きすることができます。また、transmutateという関数を使った場合は、列を追加しつつ、se...
r tidyverse 使い方 | 行のソート arrange関数 - dplyrパッケージ
tidyverseで1つのデータフレームに対する行のソートは、dplyrパッケージのarrange関数を使います。arrange関数は、データフレームの行をソートする関数です。エクセルの行の並べ替えのように、優先度の高いものから複数の条件を...
r tidyverse 使い方 | 2つのデータフレーム結合 inner_join関数 - dplyrパッケージ
tidyverseで2つのデータフレームの結合は、dplyrパッケージのjoin系関数を使います。キーが共通する部分を結合するinner_join関数がよく使われます。2つのデータフレームの結合条件によって、その他のjoin系関数を使い分け...
dplyr filter関数で行の絞り込み | r tidyverse 使い方
dplyrパッケージのfilter関数をつかえば、データフレームの行の絞り込みができます。指定した条件を満たす行を絞り込みます。複数の条件を指定した場合、全ての条件を満たす行に絞りこまれます。 条件式では、論理演算&(AND)や、|(OR)...
r tidyverse 使い方 | 列 filter 絞り込み select関数 - dplyrパッケージ
tidyverseで1つのデータフレームの列の絞り込みは、dplyrパッケージのselect関数を使います。selectは条件を満たす列を絞り込む関数です。様々な指定方法で絞り込みができます。列名と文字列条件のマッチや正規表現を利用した絞り...
tidyverse csv・tsvのファイルの読み方・データ型の指定方法 readrパッケージ
tidyverseを使う場合、ファイルの読み書きにはreadrパッケージの専用関数(read_tsv関数・read_csv関数)を使うのが便利です。これらの専用関数ではデータ・フレーム構造より使いやすいtibble型でデータを読み込みますが...
tidyverse インストールとロード tidyverseの主なパッケージ
tidyverseはRのパッケージの1つで、データ操作(抽出・連結など)を統合的に扱うためのツール群です。Rを起動後に、tidyverseのインストールを行います。インストール完了後は、使うときにパッケージをロードして使います。 とにかく早...
タイトルとURLをコピーしました