R语言 基于跨多列的另外两个数据框替换NA

pzfprimi  于 2023-02-01  发布在  其他
关注(0)|答案(1)|浏览(142)

我想用df2替换df1的NA(两个数据框都很大,大约有155列x 3966行)两个数据框都有第一列'ID',其他列名重叠。下面是示例的一部分:

> df1
       ID col1 col2  ...... col154
1  AMM115    C    A  ......     A+
2  ADM107   NA   NA  ......      B
3  AGM041    B    C  ......     C+
4  AGM132    A   NA  ......     A+
5  AQM007   NA    A  ......     B+
6  ARM028   NA   B+  ......     A-
7  ASM019    A   A+  ......     NA

> df2
       ID col1 col2  ...... col154
1  ADM107   A+    B  ......      B
2  AGM041    C    A  ......     B+
3  ARM028   A+   B+  ......     NA
4  AQM007   B+    A  ......     B+

我尝试这个答案在这里:Can I replace NAs when joining two data frames with dplyr?我知道合并可能是我需要的。它可以从第一个向量填充NA,但我怎么能跨越所有列。但我不知道如何变异和合并多列像我的真实的数据期待第一列。也选择后缀。x或。y在此代码。

library(dplyr)
df1 %>% 
        left_join(df2, by = "fruit") %>% 
        mutate(var2 = coalesce(var2.x, var2.y)) %>% 
        select(-var2.x, -var2.y)

我想得到像df3,如果df1和df2的NA有值,用df2替换df1的NA,如果没有,保持df1的原始值。

> df3
       ID col1 col2  ...... col154
1  AMM115    C    A  ......     A+
2  ADM107   A+    B  ......      B
3  AGM041    B    C  ......     C+
4  AGM132    A   NA  ......     A+
5  AQM007   B+    A  ......     B+
6  ARM028   A+   B+  ......     A-
7  ASM019    A   A+  ......     NA
wpx232ag

wpx232ag1#

您可以:

library(dplyr)
df3 <- df1 %>%
  rows_patch(df2, by = 'ID')

相关问题