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を使用する方法