如何选择一个 data.table 中的行同时匹配另一个 data.table 中的两个条件?

tar*_*ion 2 r data.table

我有两个 data.tablesDT1DT2DT1可能比 更大且更多的列DT2。我想选择其中DT1两列与DT1中两列的同一行完全匹配的行DT2。例如

DT1 = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), z=1:9)
DT2 = data.table(f=c("a","b"), g=c(1,3))
Run Code Online (Sandbox Code Playgroud)

DT1sub我正在寻找的输出是

   x y z
1: a 1 4
2: b 3 2
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我尝试对子集进行子集化时DT1,我也会得到那些只有一列匹配的行

> DT1[x%in%DT2$f & y%in%DT2$g]
#    x y z
# 1: b 1 1
# 2: b 3 2
# 3: a 1 4
# 4: a 3 5
Run Code Online (Sandbox Code Playgroud)

我可以DT1sub通过像这样的笨重for循环获得我想要的输出

DT1sub<-c()
for (i in 1:2)
  DT1sub<-rbind(DT1sub,DT1[x==DT2$f[i] & y==DT2$g[i]])
DT1sub
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更智能的 data.table 版本。这可能很简单,但我无法从example("data.table").

arg*_*t91 5

您是否在寻找:

library(data.table)

DT1sub <- DT1[DT2, on = .(x = f, y = g)]
Run Code Online (Sandbox Code Playgroud)

输出:

   x y z
1: a 1 4
2: b 3 2
Run Code Online (Sandbox Code Playgroud)

这基本上是一个过滤连接 - 它只保留那些与 , 中x任何内容匹配的行,并且对于和f也是如此。yg