r - 加入两个数据帧以删除第一个数据帧中的 NaN 值
问题描述
我想合并两个数据框列。
我有 df1,它有一个特定的列 (df$col1)。此列有 1-100 行,某些行有 NA 值(比如说第 10、15、20、50、69 行)。
数据框 2 有第 10、15、20、50、69 行。
是否可以将 DF2 合并到 df$col 以便仅 df$col 中的 NA 值由 DF2 填充..取决于每个数据集的索引号
我尝试了这个,但得到了一个看起来不像我想要的数据框
merge(brfss2$pa1min_,df,by.x=1,by.y=1,all.x=TRUE,all.y=TRUE)
这是两个数据框
数据框1:
1 NA
2 110
3 NA
4 35
5 NA
6 120
7 280
8 30
9 240
10 260
11 322
12 NA
数据框 2:
1 2127.6
3 1403.0
5 198.0
12 112.8
解决方案
一种不同的方法 - 我导入了您的数据并给出了列名:
df <- structure(list(col1 = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
), col2 = c(NA, 110, NA, 35, NA, 120, 280, 30, 240, 260, 322,
NA)), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"), row.names = c(NA,
-12L), spec = structure(list(cols = list(col1 = structure(list(), class = c("collector_double",
"collector")), col2 = structure(list(), class = c("collector_double",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), skip = 2), class = "col_spec"))
df2 <- structure(list(col1 = c(1, 3, 5, 12), col2 = c(2127.6, 1403,
198, 112.8)), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"
), row.names = c(NA, -4L), spec = structure(list(cols = list(
col1 = structure(list(), class = c("collector_double", "collector"
)), col2 = structure(list(), class = c("collector_double",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), skip = 2), class = "col_spec"))
使用tidyverse
您可以合并,然后根据没有的值有条件地添加新列NA
:
library(tidyverse)
df %>%
merge(df2, by = "col1", all.x = TRUE) %>%
mutate(new_col = if_else(is.na(col2.x), col2.y, col2.x)) %>%
select(new_col)
new_col
1 2127.6
2 110.0
3 1403.0
4 35.0
5 198.0
6 120.0
7 280.0
8 30.0
9 240.0
10 260.0
11 322.0
12 112.8
推荐阅读
- typescript - 构建打字稿库
- python - 找到不同形状的二维数组的笛卡尔积并将它们逐行水平连接成1个数组
- docker - 使用 Nginx 的 droplet 中每个容器的域
- java - ImageFilterView 旋转问题
- xcode - 从 git repo 转换 safari web 扩展不成功
- powershell - 使用 POWER SHELL 脚本更新 CSV 文件中的第一个单元格
- javascript - [Vue 警告]:在 firebase/firestore 中登录用户时找不到元素:#app
- subdomain - 在单个 amazon lightail 实例上配置子域
- html - 图片必须有替代文本:元素没有标题属性
- java - CORS 正在阻止 PUT、DELETE 和 POST 请求,但 GET 正在工作