正确的运算符在%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()
调用将仅返回行 where bf11
is TRUE
(或评估为 的内容TRUE
)。
你可以写的应该是这样的:
subset(dat, subset = bf11 == 1 | bf11 == 2 | bf11 == 3)
这给出了与我之前的电话相同的结果subset()
。关键是你需要一系列单一的比较,而不是一系列选项的比较。但正如您所看到的,%in%
在这种情况下,它更有用且更简洁。另请注意,我必须使用|
as 我想依次比较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