查找(并删除)两个表之间的公共记录(data.table)

时间:2013-10-10 18:34:22

标签: r data.table

我有两个大表,有一些共同的字段(但有不同的字段名称)。查找(和删除)此类常见记录的最简单/最快方法是什么?

例如,我有

set.seed(2)
dt1 <- data.table(dt1field1=1:9,  dt1field2=LETTERS[runif(9,1,5)], dt1field3=letters[runif(9,12,15)])
dt2 <- data.table(dt2field1=1:10, dt2fieldB=LETTERS[runif(10,1,5)], dt2fieldC=letters[runif(10,12,15)])

(抱歉傻瓜)

查找data.tablet1field2=t2fieldB所有记录的t1field3=t2fieldC语法是什么? (好吧,如果需要,我可以先重命名字段,使其与被比较的字段具有相同的名称)

提前多多感谢!

2 个答案:

答案 0 :(得分:3)

这些方面的东西 -

setkeyv(dt1,c('dt1field2','dt1field3'))
setkeyv(dt2,c('dt2fieldB','dt2fieldC'))
dt2[dt1, allow.cartesian = TRUE]

答案 1 :(得分:2)

如果一个表只有唯一值:

setkeyv(dt1, names(dt1)[2:3])
setkeyv(dt2, names(dt2)[2:3])
dt2[dt1, allow.cartesian=TRUE]

否则,我认为

dt2[!dt1, allow.cartesian=TRUE] 

适用于每张桌子。