R の列ごとに重複する行を削除する
-
dplyr
パッケージのdistinct
関数を使用して、R の列ごとに重複する行を削除する -
group_by
、filter
およびduplicated
関数を使用して、R の列ごとに重複する行を削除する -
group_by
およびslice
関数を使用して、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_by
、filter
および 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
と一緒に使用して、列の値ごとに重複する行を削除することもできます。slice
も dplyr
パッケージの一部であり、インデックスによって行を選択します。興味深いことに、データフレームがグループ化されると、次のサンプルコードに示すように、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)