我有两个数据框:
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”列中的原始顺序?
你可以使用类似的东西:
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)
在这种情况下(仅匹配一个),您可以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)