在 R 中合并数据帧的问题

Pet*_*hke 6 merge r

我有两个数据框:

x <- data.frame("coi" = c(0,1,NA,1),"v2" = c(7,8,9,NA))
y <- data.frame("c1" = c(0,-1,1), "c2" = c(0,-1,-1), "coi" = c(0,1,NA))
Run Code Online (Sandbox Code Playgroud)
> x
  coi v2
1   0  7
2   1  8
3  NA  9
4   1 NA
> y
  c1 c2 coi
1  0  0   0
2 -1 -1   1
3  1 -1  NA
Run Code Online (Sandbox Code Playgroud)

我想将它们合并成这样的东西:

> obj
  coi v2 c1 c2
1   0  7  0  0
2   1  8 -1 -1
3  NA  9  1 -1
4   1 NA -1 -1
Run Code Online (Sandbox Code Playgroud)

但是当我尝试

merge(x,y)
Run Code Online (Sandbox Code Playgroud)

我得到这个:

  coi v2 c1 c2
1   0  7  0  0
2   1  8 -1 -1
3   1 NA -1 -1
4  NA  9  1 -1
Run Code Online (Sandbox Code Playgroud)

这还不错,但是无论如何要保留“coi”列中的原始顺序?

Har*_*are 5

你可以使用类似的东西:

library(dplyr)
left_join(x, y, by = "coi")
Run Code Online (Sandbox Code Playgroud)

你会得到:

  coi v2 c1 c2
1   0  7  0  0
2   1  8 -1 -1
3  NA  9  1 -1
4   1 NA -1 -1
Run Code Online (Sandbox Code Playgroud)


GKi*_*GKi 4

在这种情况下(仅匹配一个),您可以cbind结合使用match

cbind(x, y[match(x$coi, y$coi),-3])
#    coi v2 c1 c2
#1     0  7  0  0
#2     1  8 -1 -1
#3    NA  9  1 -1
#2.1   1 NA -1 -1
Run Code Online (Sandbox Code Playgroud)