r - 基于全连接的条件合并
问题描述
我想有条件地合并两个数据集,以便 dataframe2 中的值替换 dataframe1 中的值,除非 dataframe2 包含缺失值。这应该在完全连接的情况下执行,以便保留两个数据帧中的行。
这个问题的灵感来自R 中的条件合并/替换(这似乎只适用于内部连接)。
df1 <- data.frame(x1=1:4,x2=letters[1:4],stringsAsFactors=FALSE)
df2 <- data.frame(x1=2:5,x2=c("zz","qq", NA, "qy"),stringsAsFactors=FALSE)
我想要以下结果:
x1 x2
1 1 a
2 2 zz
3 3 qq
4 4 d
5 5 qy
我尝试了以下代码,尽管它为第 4 列返回 NA,但我希望保留原始值,因为在这种情况下 df2 包含 4 的缺失值。
df3 <- anti_join(df1, df2, by = "x1")
rbind(df3, df2)
x1 x2
1 1 a
2 2 zz
3 3 qq
4 4 <NA>
5 5 qy
解决方案
可以用dplyr
.
library(dplyr)
full_join(df1,df2,by = c("x1" = "x1")) %>%
transmute(x1 = x1,x2 = coalesce(x2.y,x2.x))
x1 x2
1 1 a
2 2 zz
3 3 qq
4 4 d
5 5 qy
推荐阅读
- c++ - c++ operator overloading = not working well in visual studio yet works in eclipse CDT
- javascript - 按当前时间戳每分钟更新 node.js express api
- node.js - 如何使用 firestore 和 express.js 创建 onSnapshot 监听器
- json - How do I make a post request of a json nested in flutter?
- amazon-web-services - Unable to configure Parse Server on AWS
- javascript - How to dynamically build a geoJSON with the results of an API call in javascript
- ios - 在flutter中签署ios应用程序的命令是什么?
- php - PHP mysql条件唯一约束?
- flutter - Flutter flutter_facebook_login 插件问题(v 3.0.0)
- python - Discord 机器人接受对消息的反应