如何组合R中两个数据帧中只有一列相同的两个数据帧

时间:2016-08-26 20:38:44

标签: r dataframe merge aggregate bind

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和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发出错误'处理失败。脚本异常终止'

然后我使用了' merge'功能,但结果是

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

如果我使用功能

,请告诉我

3 个答案:

答案 0 :(得分:4)

如果要保留所有记录,则需要将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

答案 1 :(得分:3)

您可以使用此命令

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

或者如果你在更大的数据集上运行,dplyrs inner_join()函数要快得多

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

答案 2 :(得分:1)

我们可以使用match中的base R来执行此操作,它应该非常有效

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

或者我们可以使用来自on

data.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