R:将两个数据帧与非唯一键的公共和非公共元素合并

时间:2018-06-13 18:40:20

标签: r dataframe merge

我有两个数据框,包含一些常见和一些不常见的元素。 例如:

x <- data.frame(name=c("a","a","a","a"), dep=c("s","k","m","n"), stringsAsFactors = F)
y <- data.frame(name=c("a","a","a","a"), dep=c("v","k","i","m"), stringsAsFactors = F)
> x
  name dep
1    a   s
2    a   k
3    a   m
4    a   n
> y
  name dep
1    a   v
2    a   k
3    a   i
4    a   m

我想通过“name”列合并这两个数据框,以得到如下结果:

> z
  name dep.x dep.y
1    a     s  <NA>
2    a     n  <NA>
3    a     k     k
4    a     m     m
5    a  <NA>     v
6    a  <NA>     i

我尝试使用all=TRUE选项合并两个数据框,但我得到的是所有可能的组合,没有NA的行。

> merge(x,y, by="name", all=T)
   name dep.x dep.y
1     a     s     v
2     a     s     k
3     a     s     i
4     a     s     m
5     a     k     v
6     a     k     k
7     a     k     i
8     a     k     m
9     a     m     v
10    a     m     k
11    a     m     i
12    a     m     m
13    a     n     v
14    a     n     k
15    a     n     i
16    a     n     m

如何获得我想要的结果?

P.S。我的问题有点类似 Merging two data frames in R that have common and uncommon samples

除了,a)我没有要合并的“ID”列,b)他得到但不想要的结果是我想要的结果。

1 个答案:

答案 0 :(得分:2)

merge(cbind(x,dep.x=x$dep),cbind(y,dep.y=y$dep),all=T)[-2]
  name dep.x dep.y
1    a  <NA>     i
2    a     k     k
3    a     m     m
4    a     n  <NA>
5    a     s  <NA>
6    a  <NA>     v