【问题标题】:Compare columns from two data frames and modify the original data frame in consequence比较两个数据框的列并修改原始数据框
【发布时间】:2013-09-29 23:23:36
【问题描述】:

我有两个数据框:

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。

附: : 而且由于我的数据框非常大,我尽量不使用循环

【问题讨论】:

    标签: r merge comparison


    【解决方案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
    

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

    【讨论】:

      猜你喜欢
      • 2019-03-29
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      相关资源
      最近更新 更多