比较两个数据帧中的列,然后修改原始数据帧

时间:2013-09-29 14:41:41

标签: r merge comparison

我有两个数据帧:

df1:

k1  k2       k3         k4
1   Alfred   Hitchcock  0
2   Claude   Renoir     0
3   Jean     Renoir     0
4   Louis    Mallet     0
5   Louis    Jouvet     0

和df2:

k1  k2       k3 
1   Paul     Newman
2   Alfred   Hitchcock
3   Ernst    Jünger

我想找到一种方法来比较我的两个数据帧的k2和k3列。 如果有重复的项目,相对于k2和k3,从df1到df2(这里df1“Alfred”/“Hitchcock”的第一个条目与df2的第二个条目匹配),我想更新k4。我想要这个结果:

k1  k2       k3         k4
1   Alfred   Hitchcock  1
2   Claude   Renoir     0
3   Jean     Renoir     0
4   Louis    Mallet     0
5   Louis    Jouvet     0

我考虑过使用简单的指令,例如:

df1$k4 [df1$k2 %in% df2$k2 & df1$k3 %in% df2$k3] <- 1

但它不起作用。 我也考虑过使用merge()指令,但它似乎无法帮助我(我不需要合并我的数据帧)。

我想我可以用SQL来处理它,但是R in不能......我已经尝试了sqldf,但它不适用于OUTER和FULL JOIN。

P.S。 :并且由于我的数据框架非常庞大,我尝试不使用循环

1 个答案:

答案 0 :(得分:1)

(1)试试这个:

transform(df1, k4 = k4 + paste(k2, k3) %in% paste(df2$k2, df2$k3))

(2)或者:

library(sqldf)
sqldf("select df1.k1, k2, k3, k4 + (df2.k1 is not null) k4 
       from df1 left join df2 
       using (k2, k3)")

,并提供:

  k1     k2        k3 k4
1  1 Alfred Hitchcock  1
2  2 Claude    Renoir  0
3  3   Jean    Renoir  0
4  4  Louis    Mallet  0
5  5  Louis    Jouvet  0

更新:添加了第二个解决方案。