【问题标题】:How to combine two data frames where only one column is same in two data frames in R如何组合两个数据帧,其中只有一列在 R 中的两个数据帧中相同
【发布时间】:2017-01-03 14:24:25
【问题描述】:

DF1 是

No ID
2  5678
3  3241
5  8167

DF2 是

 NO Name meaning
  1   a    aaple
  2   b    bat
  3   c    cat
  4   d    dam
  5   e    egg

我想将 DF1 AND DF2 合并到 DF3(这包含 DF1 和 DF2 中的所有列)

预期的输出 DF3 是

      No Name meaning  ID
      1   a    aaple
      2   b    bat    5678
      3   c    cat    3241
      4   d    dam
      5   e    egg    8167

我尝试使用 cbind,但 R 给出错误“进程失败。脚本异常终止'

然后我使用了“合并”功能,但结果是

  No Name meaning  ID
  2   b    bat    5678
  3   c    cat    3241
  5   e    egg    8167

如果我使用函数有误,请告诉我

【问题讨论】:

    标签: r dataframe merge aggregate bind


    【解决方案1】:

    如果要保留所有记录,则需要将all 参数指定为 TRUE。看看?merge,默认情况下,all, all.xall.y 设置为 FALSE 并且是内连接:

    merge(df1, df2, by = "No", all = T)
    
    #   No   ID Name meaning
    # 1  1   NA    a   aaple
    # 2  2 5678    b     bat
    # 3  3 3241    c     cat
    # 4  4   NA    d     dam
    # 5  5 8167    e     egg
    

    【讨论】:

      【解决方案2】:

      你可以使用这个命令

      df3 <- merge(x = df1, y = df2, by = "No", all = TRUE)
      

      或者如果您在更大的数据集上进行操作,dplyrs inner_join() 函数会更快

      library(dplyr)
      df3 <- inner_join(df2,df1,by = "no")
      

      【讨论】:

      • 对于 OP 所需的输出,需要 left_join 而不是 inner_join
      【解决方案3】:

      我们可以使用base R中的match来做到这一点,它应该非常有效

      DF3 <- DF2
      DF3$ID <- DF1$ID[match(DF2$NO, DF1$No)]
      DF3
      #  NO Name meaning   ID
      #1  1    a   aaple   NA
      #2  2    b     bat 5678
      #3  3    c     cat 3241
      #4  4    d     dam   NA
      #5  5    e     egg 8167
      

      或者我们可以使用 ondata.table 的连接

      library(data.table)
      setDT(DF1)[DF2, on = c("No" = "NO")]
      #    No   ID Name meaning
      #1:  1   NA    a   aaple
      #2:  2 5678    b     bat
      #3:  3 3241    c     cat
      #4:  4   NA    d     dam
      #5:  5 8167    e     egg
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-22
        • 1970-01-01
        • 2013-12-19
        相关资源
        最近更新 更多