匹配值的帧
问题描述:
我有这样的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是否可以更快地完成。
答
我们可以做一个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
可能的重复http://*.com/questions/1299871/how-to-join-merge-data-frames-inner-outer-left-right –