R言語のtidyverseパッケージに含まれているdplyrパッケージの関数distinct()は、データフレームから重複行を削除する機能を提供しています。この関数distinct()の引数に重複を判別する対象の列を指定するのですが、データフレームから列を選択する関数dplyr::select()のようにstarts_with()やends_with()、contains()、matches()を使用して列を指定できません。ここでは、関数distinct()でもstarts_with()やends_with()、contains()、matches()を使用して列を指定できる方法をお伝えします。
tidyselectを使用する方法
ToothGrowthデータセットを使用します。
ToothGrowth |> head()
len supp dose
1 4.2 VC 0.5
2 11.5 VC 0.5
3 7.3 VC 0.5
4 5.8 VC 0.5
5 6.4 VC 0.5
6 10.0 VC 0.5
ToothGrowthデータセットの行数を確認しておきます。
ToothGrowth |> nrow()
[1] 60
distinct()でtidyselectを使用するには、次のようにpick()の引数にtidyselectを指定します。次はmatches()を使用して「supp」または「dose」で始まる列をdistinct()の対象としている例です。
ToothGrowth |>
distinct(pick(matches("^supp|^dose"))) |>
head()
supp dose
1 VC 0.5
2 VC 1.0
3 VC 2.0
4 OJ 0.5
5 OJ 1.0
6 OJ 2.0
R応用 dplyr::distinct()の列指定でtidyselectを使用する方法