dplyrのfilterでいずれかの値に当てはまる行を抽出したい

前田先生によるデータハンドリング入門←を見ればOKですが,メモ代わりにまとめておきます。 dplyrのfilterを使うことである列で特定の条件に合致するものが含まれる「行」を抜き出すことができます。 dplyrを使う中で以下の事態を考えます。

「特定の値(具体的にはID)が複数あり,その値たちが含まれる行(いずれかの値に当てはまる行)を抽出したい」

より具体的には,実験データのうち,除外事項に当てはまる参加者のIDを特定しており,そのデータを取り除きたいという場合です。 例えば,N=10のデータで参加者番号が1〜10で割り当てられている中で,1, 2, 4, 6, 5, 10の参加者のデータを抽出したいという場合です。参照元を見ればわかりますが,文字列でも可能です。

データセットはsleepを使います。睡眠時間のデータでIDが個人番号として当てられています。

#sleepのデータセットを利用
dat <- sleep
#IDがいずれかの値に一致する行を抽出
dat <- dat %>% dplyr::filter((ID %in% c(1, 2, 4, 6, 5, 10)))

逆に,いずれかの値に一致する行を除外したい場合は以下です。

#sleepのデータセットを利用
dat <- sleep
#IDがいずれかの値に一致する行を抽出
dat <- dat %>% dplyr::filter((!ID %in% c(1, 2, 4, 6, 5, 10)))

なお,ここまで書いておいてなんですが,データ分析を行う場合には,当該IDを除外するかどうかの識別する列を作成し,そこに除外するかどうか(0 or 1)を指定しておく方が無難かもしれません。