匹配2个不同数据帧中的值

时间:2016-09-16 10:34:20

标签: r

我有2个这样的数据框:

123   85
145   44

和另一个:

zip    c
1      2
2      5
3      3
4      4

我想要做的是创建另一个数据框(或在第二个中添加一个列),当两个zip相同时,必须将值计算为(ch - c)。例如,在上面的示例中,它将是这样的:

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

我目前正在使用for循环,循环遍历第二个数据帧的每个项目并检查第一个数据帧中的对应项,但由于我的输入数据非常庞大,我想知道R是否可以执行它更快。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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