2016-09-16 92 views
0

我有這樣的2個數據幀:匹配值的幀

zip c 
1  2 
2  5 
3  3 
4  4 

,另一種:

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

我想要做的是創建另一個數據幀(或在第二個列中添加一列),其中值必須計算爲(ch - c)當兩個zip是相同的。例如,在上面的例子中它會是這樣:

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

目前我正在做一個for循環,循環在第二數據幀中的每個項目,並檢查了記者一個在第一數據幀,但由於我的輸入數據非常龐大,我想知道R是否可以更快地完成。

+1

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

回答

0

我們可以做一個merge,然後減去「C」和「章」

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