匹配值的帧

问题描述:

我有这样的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://*.com/questions/1299871/how-to-join-merge-data-frames-inner-outer-left-right –

我们可以做一个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 

的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