2016-07-06 8 views
0

私の英語ではこの質問をどのように行うべきか正確に尋ねることができませんので、 私はこのような1つのデータフレーム:別のデータフレームからのベクトルの等しい値に対応する値を1つのデータフレームに追加する方法

A 0 20 
A 20 30 
A 30 50 
A 50 100 
... 
B 0 30 
B 30 150 
... 

そして、他のように:

A 20 30 1.0 
A 50 100 2.5 
B 30 150 -1.02 

そして、基本的に、私はそれが第二データフレームの4番目の列から値を持っているでしょうので、最初のデータセットを変更したいです最初の3つの列の値がデータセットと他の場合にはゼロ(またはNAS)の両方で等しい場合:もちろん

A 0 20 0 
A 20 30 1.0 
A 30 50 0 
A 50 100 2.5 
... 
B 0 30 0 
B 30 150 -1.02 

Iはループの醜いとすることを行うことができ私の直感は、この問題を解決するより洗練された方法があり、多分先進的なパッケージがあるかもしれないと私に伝えています。

+2

と一致しませんでしたaの例を維持するためにmergeを伝え、あなたは 'merge'を試みたことがありますか? – Psidom

+1

これは 'left join'を使って行うことができます。 http://stackoverflow.com/questions/1299871/how-to-join-merge-data-frames-inner-outer-left-right – ytk

答えて

0

コメントは提案のように、merge()が左を実装して参加:

a <- data.frame( "a" = c("A","A","A","A","B","B"), "b" = c(0,20,30,50,0,30), "c" = c(20,30,50,100,30,150)) 
b <- data.frame("a" = c("A","A","B"), "b"= c(20,50,30), "c" = c(30,100,150) , "d" = c(1,2.5,-1.02)) 

merge(x = a, y = b , by = c("a","b","c") , all.x = TRUE) 

all.x

+0

ありがとう、David!私はあなたがall.xを指していたのであなたの答えはより良いと思います。 –

関連する問題