LEFT JOIN合并data.table

问题描述:

我想做一个左2个data.frames上R,使用data.table库联接。我拥有的一切:LEFT JOIN合并data.table

library(data.table) 
id<-c("a1","a2","a3","a4") 
id2<-c("a2","a3","a1","a4") 
y<-c(1,2,3,4) 
z<-c(3,5,6,7) 
k<-c(1,3,8,7) 

df1<-data.table(id,y,z) 

id<-c("a2","a3","a1","a4") 
df2<-data.table(id,k,y) 

我想要的结果是一个新的data.table框架,这是左连接的结果,这就是:

result--> id,x,y,z 

我用这个作为指导: https://rstudio-pubs-static.s3.amazonaws.com/52230_5ae0d25125b544caab32f75f0360e775.html

merge(df1,df2,by="id",all.x=TRUE) 

但是这回我:

id y.x z x y.y 
1: a1 1 3 3 3 
2: a2 2 5 0 1 
3: a3 3 6 2 2 
4: a4 4 7 1 4 

与此问题是,列y是重复的,我希望只出现一次。

我已经尝试了所有= FALSE,all.x = T,......但我不达到我想要的。

我也尝试过其他的解决方案,如建议:再次left join in data.table

setkey(df1,id) 
setkey(df2,id) 
df1[df2] 

但对此,复制在Y列。

id y z k i.y 
1: a1 1 3 8 3 
2: a2 2 5 1 1 
3: a3 3 6 3 2 
4: a4 4 7 7 4 

我该怎么办?

+0

你想要的输出是什么? –

+1

你为什么感到惊讶?你在这两个表中都有y列。 R应该如何知道你只想要其中的一个?哪一个? –

您可以通过删除其中一个表中的列y来合并df1df2。尝试dplyr::left_join(df1, df2[, -c("y")], by = "id")merge(df1, df2[, -c("y")], by = "id")

+0

这不是一个好的解决方案,因为我拥有超过2000个相同的列,并且手动完成它的工作!不管怎样,谢谢 – Jesus

+0

如果列是表之间确实是相同的,这样的事情应该工作'合并(DF1,DF2)'(如[这里](https://*.com/questions/22480836/merge-data-frame-but只保留唯一的列),@thank Hardik gupta)。另一选择是设置含有'colnames(DF1)中的所有列重复[(colnames(DF1)%以%colnames(DF2))]'一个载体中,然后在'merge'功能使用该向量(在该'by'参数或子表之一)。 – ANG