R の列ごとに重複する行を削除する

胡金庫 2023年1月30日
  1. dplyr パッケージの distinct 関数を使用して、R の列ごとに重複する行を削除する
  2. group_byfilter および duplicated 関数を使用して、R の列ごとに重複する行を削除する
  3. group_by および slice 関数を使用して、R の列ごとに重複する行を削除する
R の列ごとに重複する行を削除する

この記事では、R の列ごとに重複する行を削除する方法を紹介します。

dplyr パッケージの distinct 関数を使用して、R の列ごとに重複する行を削除する

dplyr パッケージは、R 言語で使用される最も一般的なデータ操作ライブラリの 1つである distinct 関数を提供します。distinct は、指定されたデータフレーム内の一意の行を選択します。最初の引数としてデータフレームを取り、次に選択時に考慮する必要のある変数を取ります。一意の行をフィルタリングするために複数の列変数を指定できますが、次のコードスニペットでは、単一変数の例を示します。3 番目の引数はオプションであり、デフォルト値は FALSE ですが、ユーザーが明示的に TRUE を渡すと、関数はフィルタリング後にすべての変数をデータフレームに保持します。dplyr は、パイプ-%>%と呼ばれる演算子関数を使用することに注意してください。これは、右の関数の最初の引数として左の変数を提供すると解釈されます。つまり、x %?% f(y) 表記は f(x, y) になります。

library(dplyr)

df1 <- data.frame(id = c(1, 2, 2, 3, 3, 4, 5, 5),
                 gender = c("F", "F", "M", "F", "B", "B", "F", "M"),
                 variant = c("a", "b", "c", "d", "e", "f", "g", "h"))

t1 <- df1 %>% distinct(id, .keep_all = TRUE)
t2 <- df1 %>% distinct(gender, .keep_all = TRUE)
t3 <- df1 %>% distinct(variant, .keep_all = TRUE)

df2 <- mtcars

tmp1 <- df2 %>% distinct(cyl, .keep_all = TRUE)
tmp2 <- df2 %>% distinct(mpg, .keep_all = TRUE)

group_byfilter および duplicated 関数を使用して、R の列ごとに重複する行を削除する

列値によって重複行を削除する別の解決策は、データフレームを列変数でグループ化し、filter および duplicated 関数を使用して要素をフィルター処理することです。最初のステップは、dplyr パッケージの一部である group_by 関数を使用して実行されます。次に、前の操作の出力が filter 関数にリダイレクトされ、重複する行が削除されます。

library(dplyr)

df1 <- data.frame(id = c(1, 2, 2, 3, 3, 4, 5, 5),
                 gender = c("F", "F", "M", "F", "B", "B", "F", "M"),
                 variant = c("a", "b", "c", "d", "e", "f", "g", "h"))

t1 <- df1 %>% group_by(id) %>% filter (! duplicated(id))
t2 <- df1 %>% group_by(gender) %>% filter (! duplicated(gender))
t3 <- df1 %>% group_by(variant) %>% filter (! duplicated(variant))

df2 <- mtcars

tmp3 <- df2 %>% group_by(cyl) %>% filter (! duplicated(cyl))
tmp4 <- df2 %>% group_by(mpg) %>% filter (! duplicated(mpg))

group_by および slice 関数を使用して、R の列ごとに重複する行を削除する

または、group_by 関数を slice と一緒に使用して、列の値ごとに重複する行を削除することもできます。slicedplyr パッケージの一部であり、インデックスによって行を選択します。興味深いことに、データフレームがグループ化されると、次のサンプルコードに示すように、slice は各グループの特定のインデックスの行を選択します。

library(dplyr)

df1 <- data.frame(id = c(1, 2, 2, 3, 3, 4, 5, 5),
                 gender = c("F", "F", "M", "F", "B", "B", "F", "M"),
                 variant = c("a", "b", "c", "d", "e", "f", "g", "h"))

t1 <- df1 %>% group_by(id) %>% slice(1)
t2 <- df1 %>% group_by(gender) %>% slice(1)
t3 <- df1 %>% group_by(variant) %>% slice(1)

df2 <- mtcars

tmp5 <- df2 %>% group_by(cyl) %>% slice(1)
tmp6 <- df2 %>% group_by(mpg) %>% slice(1)
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - R Data Frame