2017-10-10 8 views
-1

data.tableライブラリを使用して、Rの2つのdata.framesで左ジョイントを行いたいとします。私は何を持っている:私は、結果が新しいdata.tableフレームであることを左ジョイント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) 

たい、LEFTの結果、このJOINをされて、これは次のようになります。

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が重複していて、一度しか表示されないようにすることです。

私はall = 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列があります。あなたが彼らのうちの1つだけを望むことをRがどのように知っていたと思いますかそしてどちらが? –

答えて

1

df1df2を1つの表のy列を削除してマージすることができます。 dplyr::left_join(df1, df2[, -c("y")], by = "id")またはmerge(df1, df2[, -c("y")], by = "id")を試してください。

+0

これは良い解決策ではありません。なぜなら私は2000以上の等しい列を持ち、それを手作業でやっているからです!とにかくありがとうございます – Jesus

+0

テーブル間でカラムが実際に同じ場合、このようなものは 'merge(df1、df2)'([here](https://stackoverflow.com/questions/22480836/merge-data-frame-butのような) -keep-only-unique-columns)、@thank Hardik gupta)。他のオプションは、 'colnames(df1)[(colnames(df2))%]の' colnames(df1)%]] 'で複製された全ての列を含むベクトルを設定し、' merge'関数で( 'by'引数を使用するか、またはテーブルのサブセットをサブセット化します)。 – ANG