2016-09-16 4 views
0

私はこのような2つのデータフレームがあります。マッチ値

zip c 
1  2 
2  5 
3  3 
4  4 

と他の1:私は何をしたいか

x  zip  ch 
1  1  2 
2  2  1 
3  1  4 

を別のデータフレームを作成することです(または2つ目のzipが同じときに値を(ch-c)として計算する必要がある列を2番目の列に追加します)。例えば、上記の例では、それはこのようになります:

x  zip  ch new 
1  1  2  0 
2  2  1  -4 
3  1  4  2 

私は現在、第二のデータフレームの各項目をループのため、サイクリングでそれをやって最初のデータフレームにおける対応の1をチェックしていますしかし、私の入力データは非常に大きいので、私はRがもっと高速にできるかどうか疑問に思っています。

+1

可能な複製http://stackoverflow.com/questions/1299871/how-to-join-merge-data-frames-inner-outer-left-right –

答えて

0

我々はmergeを行い、その後、「C」と「CH」

transform(merge(df1, df2, by = "zip"), new = ch-c)[-2] 

それとも我々はdata.tableを使用している場合、これは参加

で行うことができますを減算することによって、列を作成することができます
library(data.table) 
setDT(df2)[df1, new := ch- c, on = "zip"] 
df2 
# x zip ch new 
#1: 1 1 2 0 
#2: 2 2 1 -4 
#3: 3 1 4 2 
0

dplyr方法:

library(dplyr) 
inner_join(df2, df1, by = "zip") %>% mutate(new=ch-c) %>% select(-c) 

# x zip ch new 
#1 1 1 2 0 
#2 2 2 1 -4 
#3 3 1 4 2