2015-05-17 21 views
3

我要选择,如果第一列的值DATA2存在数据1的行:合并两个数据帧与非唯一键

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 

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

回答

3

后“加入”这是一个没有连接的方法:

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

嗯,在我的系统上,它可能是这个改变了更新版本的'data.table'?我得到5行没有'唯一'。 – nrussell

+0

我正在使用devel版本,所以可能它是不同的。 – akrun

+0

好的,我仍然在1.9.4上。 – nrussell

4

我们可以为“A”柱创建在每个数据集的顺序列(“IND”)和设置键列“a”和“IND”

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