0

我有两个数据框:

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 不能......我试过 sqldf 但它不适用于 OUTER 和 FULL JOIN。

PS:由于我的数据框非常大,我尝试不使用循环

4

1 回答 1

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

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

于 2013-09-29T15:16:13.807 回答