即使两个数据帧之间的某些行不同,R 合并也不复制列

R merge not duplicating columns even when some row differ between both dataframes

我正在尝试合并 2 个仅在一行和一列不同的数据帧:

df1
          factor  nb  pass
   A        f      1   Yes
   B        c      3   No
   C        a      3   Yes

df2
         factor  quality pass
   A        f       100     Yes
   B        c       30      No
   D        x       60      Yes

咨询 this post 后,我尝试了以下方法:

merge(df1, df2, by='row.names')

但这只是 returns 两个数据框之间的共同观察,并且它还复制了共同的列:

df3
       factor.x   nb.x   pass.x   factor.y   quality.y  pass.y
A         f        1       Yes      f          100       Yes
B         c        3       No       c          30        No

我也试过:

merge(df1, df2)

但它不起作用,因为常见变体位于行名中。

终于,我试过了:

merge(df1, df2, by='row.names', all =T, no.dup= T)

在这种情况下,不常见的观察结果也包含在合并的数据框中,但所有变体都是重复的。

你知道我怎样才能得到这个数据框吗?

     factor   nb   pass   quality
A      f       1    Yes    100
B      c       3    No     30
C      a       3    Yes    NA
D      x       NA   Yes    60

谢谢!

library(dplyr)
full_join(df1, df2)

Joining, by = c("id", "factor", "pass")
  id factor nb pass quality
1  A      f  1  Yes     100
2  B      c  3   No      30
3  C      a  3  Yes      NA
4  D      x NA  Yes      60

R 对行名不是很好,如果你想保留行名你需要先将它们添加为一列然后按所有公共列合并

merge(
  cbind("rows"=rownames(df1),df1),
  cbind("rows"=rownames(df2),df2),
  all=T
)

  rows factor pass nb quality
1    A      f  Yes  1     100
2    B      c   No  3      30
3    C      a  Yes  3      NA
4    D      x  Yes NA      60

或者

merge(df1,df2,by=c("row.names","factor","pass"),all=T)