我有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是否可以执行它更快。
答案 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