我有两个数据帧:
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。 :并且由于我的数据框架非常庞大,我尝试不使用循环
答案 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
更新:添加了第二个解决方案。