如何选择与另一个表中的行匹配的表的所有行

时间:2015-06-10 22:09:15

标签: r data.table

我正在尝试使用data.table做一些非常简单的事情,而我却失去了惯用的方法

library(data.table)
set.seed(1)
DT = data.table(a=sample(letters,1e5,T), b=sample(letters,1e5,T), c=rnorm(1e5))
DT2 = data.table(a=sample(letters,5,T), b=sample(letters,5,T)) 

DT2
   a b
1: k h
2: e v
3: f n
4: m q
5: w v

我想选择与DT匹配的DT2行。 因此,操作后的行数总是小于初始表。

我想做点什么:

> DT[paste(a,b) %chin% DT2[,paste(a,b)]]
     a b          c
  1: m q -0.4974579
  2: e v -0.1325602
  3: w v -1.8081050
  4: m q  0.9025120
  5: w v -0.4958802
 ---               
729: f n  0.5604650
730: f n -1.2607321
731: m q  0.5146013
732: m q -1.8329656
733: k h -0.9752011
> DT2[paste(a,b) %chin% DT[,paste(a,b)]]
   a b
1: e v
2: f n
3: k h
4: m q
5: w v
> 

1 个答案:

答案 0 :(得分:3)

内部联接应该:

setkey(DT, a, b)[DT2, nomatch=0]

产地:

     a b          c
  1: k h -1.6592442
  2: k h  1.1946471
  3: k h -0.8694933
  4: k h  0.7789158
  5: k h -1.3142607
 ---               
729: w v -0.3516787
730: w v  0.5272145
731: w v -0.7531717
732: w v  0.3352228
733: w v  0.1182353

如果您想知道DT2DT中存在哪些值,那么:

unique(setkey(DT[, .(a, b)], a, b))[DT2, nomatch=0]