R 使用两个变量筛选data.table,一种优雅快速的方法

R 使用两个变量筛选data.table,一种优雅快速的方法,r,data.table,R,Data.table,我想问一下,是否有一种方法可以根据多个变量的组合进行过滤。更具体地说: library(dplyr) library(plyr) library(data.table) data <- iris %>% cbind( group = rep(c("a", "b", "c"), nrow(iris))) %>% as.data.table() Sepal.Length Sepal.Width Petal.Length Petal.Width Species group

我想问一下,是否有一种方法可以根据多个变量的组合进行过滤。更具体地说:

library(dplyr)
library(plyr)
library(data.table)

data <- iris %>% cbind( group = rep(c("a", "b", "c"), nrow(iris))) %>% as.data.table()

   Sepal.Length Sepal.Width Petal.Length Petal.Width Species group
1:          5.1         3.5          1.4         0.2  setosa     a
2:          4.9         3.0          1.4         0.2  setosa     b
3:          4.7         3.2          1.3         0.2  setosa     c
4:          4.6         3.1          1.5         0.2  setosa     a
5:          5.0         3.6          1.4         0.2  setosa     b
6:          5.4         3.9          1.7         0.4  setosa     c
但是,我想知道是否有一种更有效/更快/更容易的方法: 大概是这样的:

data[.(Species, group) %in% filter] # does not work

在这种情况下,您可以这样做

data[filter, on=names(filter), nomatch=0]

用于类似的筛选联接。

@Jaap我猜该链接用于更复杂的筛选操作,如
on=(x=x,y!=y)
。在这里,我认为,
data[filter,on=names(filter),nomatch=0]
可能是目标,或者可能是的,事实上@Frank回答了我的问题,也回答了我的问题。因为正如我所说的,我正在寻找一种更优雅、更简单的方法。弗兰克的回答就足够了,如果你把它写下来作为回答,那么我可以接受。
data[.(Species, group) %in% filter] # does not work
data[filter, on=names(filter), nomatch=0]