2017-10-10 102 views
-1

我想做一個左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應該如何知道你只想要其中的一個?哪一個? –

回答

1

您可以通過刪除其中一個表中的列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://stackoverflow.com/questions/22480836/merge-data-frame-but只保留唯一的列),@thank Hardik gupta)。另一選擇是設置含有'colnames(DF1)中的所有列重複[(colnames(DF1)%以%colnames(DF2))]'一個載體中,然後在'merge'功能使用該向量(在該'by'參數或子表之一)。 – ANG