使用非唯一键合并两个数据帧

时间:2015-05-17 10:54:15

标签: r data.table

如果data2中存在第一列的值,我想选择data1的行:

data1<-data.table(a=c(1,2,3,1),b=c(1,4,6,3))
data2<-data.table(a=c(1,3,1,5,6))


Desired output:
a b 
1 1 
3 6 
1 3 

合并不起作用,因为键不是唯一的,任何其他想法?

2 个答案:

答案 0 :(得分:4)

我们可以在&#39; a&#39;的每个数据集中创建一个序列列(&#39; ind&#39;)。栏目&#39;加入&#39;将关键列设置为&#39; a&#39;和&#39; ind&#39;

data1[, ind:=1:.N, a]
data2[, ind:= 1:.N, a]
setkey(data1, a, ind)[data2, nomatch=0][, ind:=NULL]
#   a b
#1: 1 1
#2: 3 6
#3: 1 3

答案 1 :(得分:3)

这是一种没有连接的方法:

> unique(data1[a %in% data2[,a],])
   a b
1: 1 1
2: 3 6
3: 1 3