首页 > 解决方案 > 加入两个数据帧以删除第一个数据帧中的 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

标签: rdataframemerge

解决方案


一种不同的方法 - 我导入了您的数据并给出了列名:

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

推荐阅读