我有以下数据:
x<-data.frame(A=c(1,NA),B=c(NA,NA),C=c(NA,1))
A B C
1 1 NA NA
2 NA NA 1
和
y<-data.frame(A=c(NA,0),C=c(NA,NA),D=c(NA,0))
A C D
1 NA NA NA
2 0 NA 0
我希望以这种方式合并它们,同名的列被覆盖,优先于非NA值。此外,应添加不常见的列。
期望的结果:
A B C D
1 1 NA NA NA
2 0 NA 1 0
我的数据中的非NA值之间没有冲突。
答案 0 :(得分:0)
你可以尝试:
library(dplyr)
library(magrittr)
full_join(x,y) %>%
inner_join(y) %>%
coalesce(full_join(x,y) %>%
inner_join(x))
给出:
A B C D
1 1 NA NA NA
2 0 NA 1 0
答案 1 :(得分:0)
这是一个基本的R方法,应该相当通用。
# fill in x NA values with values in y
x[] <- lapply(names(x), function(i) ifelse(is.na(x[,i]) & i %in% names(y), y[,i], x[,i]))
# add variables in y that are not in x and provide names to the variables
setNames(cbind(x, y[, !(names(y) %in% names(x))]), union(names(x), names(y)))
A B C D
1 1 NA NA NA
2 0 NA 1 0