r - 在 r 中合并两个 df 替换缺失值
问题描述
我想在 R 中匹配两个相似的数据框。两个 dfs 都有部分相同的变量和一个键(id),其中包含缺失值:
library(tidyverse)
df1 <- as_tibble(list(id = seq(1:6),
v1 = c(1, 0, NA, 1, 0, NA),
v2 = c(NA, NA, 0, 0, 1, NA),
v3 = c(1, 0 , 1, 1, 1, NA)))
df1
# A tibble: 6 x 4
id v1 v2 v3
<int> <dbl> <dbl> <dbl>
1 1 1 NA 1
2 2 0 NA 0
3 3 NA 0 1
4 4 1 0 1
5 5 0 1 1
6 6 NA NA NA
df2 <- as_tibble(list(id = seq(1:6),
v1 = c(1, NA, 0, 1, 0, 1),
v2 = c(1, 0, 0, NA, 1, 1),
v4 = c(0, 1, 0, NA, NA, NA)))
df2
# A tibble: 6 x 4
id v1 v2 v4
<int> <dbl> <dbl> <dbl>
1 1 1 1 0
2 2 NA 0 1
3 3 0 0 0
4 4 1 NA NA
5 5 0 1 NA
6 6 1 1 NA
我想将它们合并到一个看起来像这样的df:
id v1 v2 v3 v4
<int> <dbl> <dbl> <dbl> <dbl>
1 1 1 1 1 0
2 2 0 0 0 1
3 3 0 0 1 0
4 4 1 0 1 NA
5 5 0 1 1 NA
6 6 1 1 NA NA
到目前为止,我已经尝试了来自 dplyr 的所有类型的连接,但不知何故我没有得到它。
解决方案
更好的答案,与我的第一个相比:
bind_rows(df1, df2) %>%
group_by(id) %>%
summarise_all(~ coalesce(.[1], .[2]))
## A tibble: 6 x 5
# id v1 v2 v3 v4
# <int> <dbl> <dbl> <dbl> <dbl>
# 1 1 1 1 1 0
# 2 2 0 0 0 1
# 3 3 0 0 1 0
# 4 4 1 0 1 NA
# 5 5 0 1 1 NA
# 6 6 1 1 NA NA
推荐阅读
- sql-server - 使用带有 count 和 group by 的别名
- php - 仅当必填字段存储在 db 中时才发布帖子
- neo4j - 通过参数对相同标签的节点进行分组
- tomcat - Appach Tomcat 在我运行时自动关闭
- android - 滑动删除Recyclerview带来空对象引用错误
- powerbi-embedded - 制作 Power BI 报表 FitToWidth 和 full height
- python-3.x - 将 v.redd.it 视频下载为 mp4
- c# - 保存代码后事件不起作用(在窗口反序列化中)
- pyspark - 使用 Pyspark 从 Spark DataFrame 创建标记点
- c# - 如何获取中继器中特定单元格的值?