正しいオペレーターは%in%
こちらです。ダミーデータを使用した例を次に示します。
set.seed(1)
dat <- data.frame(bf11 = sample(4, 10, replace = TRUE),
foo = runif(10))
与える:
> head(dat)
bf11 foo
1 2 0.2059746
2 2 0.1765568
3 3 0.6870228
4 4 0.3841037
5 1 0.7698414
6 4 0.4976992
集合のいずれかに等しいdat
whereのサブセットは、を使用して次のように取得されます。bf11
1,2,3
%in%
> subset(dat, subset = bf11 %in% c(1,2,3))
bf11 foo
1 2 0.2059746
2 2 0.1765568
3 3 0.6870228
5 1 0.7698414
8 3 0.9919061
9 3 0.3800352
10 1 0.7774452
オリジナルが機能しなかった理由については、それを分解して問題を確認してください。1||2||3
次のように評価されるものを見てください。
> 1 || 2 || 3
[1] TRUE
|
代わりにを使用しても同じ結果が得られます。その結果、このsubset()
呼び出しbf11
はTRUE
(または に評価されたものTRUE
) の行のみを返します。
あなたが書くことができたのは、次のようなものでした:
subset(dat, subset = bf11 == 1 | bf11 == 2 | bf11 == 3)
以前のsubset()
呼び出しと同じ結果が得られます。ポイントは、一連のオプションの比較ではなく、一連の単一の比較が必要だということです。しかし、ご覧の%in%
とおり、このような状況では、はるかに便利で冗長性が低くなります。、、およびの各要素を順番|
に比較したいので、を使用する必要があることにも注意してください。比較:bf11
1
2
3
> with(dat, bf11 == 1 || bf11 == 2)
[1] TRUE
> with(dat, bf11 == 1 | bf11 == 2)
[1] TRUE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE