
3.2
filter()
で行にフィルタにかける
41
3.2.2
論理演算子
複数の引数でフィルタをかけると論理積(
and
)になります。行が出力に含まれるには、すべての式
が真でなければなりません。他の組み合わせにはブール演算子を使います。
&
が「論理積」、
|
が「論
理和」、
!
が「否定」を示します。次の図は論理演算(ブール演算)のすべてを示します。
次のコードは、11月または12月に出発した全フライトを探します。
filter(flights, month == 11 | month == 12)
演算の順序は言葉で言うのとは異なります。
filter(flights, month == 11 | 12)
と書いてはい
けません。これは、「11月または 12 月に出発した全フライトを探す」と文字としては翻訳できそうで
す。しかし、これは11
|
12と等しい月を探します。11
|
12は式としては
TRUE
と評価されます。(こ
の場合のように)数値計算の文脈としては、
TRUE
が1と等しくなるので、これは11月または12 月の
ではなく1月の全フライトを探すことになります。混乱のもとです。
この問題に対する有用な省略記法が、
x %in% y
です。これは、
x
が
y
の中のどれかの値に等しい行
を選びます。上のコードを次のように書き直せます。
nov_dec <- filter(flights, month %in% c(11, 12))
複雑な部分集合操作を、ド・モルガンの法則を思い出して単純化できることがあります。
!(x & ...