使用 %in% 对 data.table 进行子集化

bum*_*bee 3 r subset data.table

我有一个数据表

library(data.table)
DT <- data.table(a=c(1,2,3,4), b=c(4,4,4,4), x=c(1,3,5,5))
> DT
   a b x
1: 1 4 1
2: 2 4 3
3: 3 4 5
4: 4 4 5
Run Code Online (Sandbox Code Playgroud)

我想选择x等于a或 的行b。显然,我可以使用

> DT[x==a | x==b]
   a b x
1: 1 4 1
Run Code Online (Sandbox Code Playgroud)

这给出了正确的结果。然而,对于我认为的许多专栏,以下内容应该同样有效

> DT[x%in%c(a,b)]
   a b x
1: 1 4 1
2: 2 4 3
Run Code Online (Sandbox Code Playgroud)

但它给出了一个对我来说不直观的不同结果。有人可以帮忙吗?

Hug*_*ugh 5

表达方式

 DT[x==a | x==b]
Run Code Online (Sandbox Code Playgroud)

返回和DT中的值相等或和相等的所有行。这是期望的结果。xaxb

另一方面

 DT[x%in%c(a,b)]
Run Code Online (Sandbox Code Playgroud)

返回与 中的任何x匹配的所有行,而不仅仅是对应的值。因此,您的第二行出现是因为和出现在(某处)。c(a, b)x == 33a