如何用另一列的值替换 NA

how to replace NA with the values from another column

我想用变量 a.

中的值替换以下数据框中的 NA
df.NA <- data.frame(
  a = c("value1", "value2", "value3", "value4", "value5"),
  b = c(NA, 6, 7, NA,8),
  c = c(9, NA, NA, 10, 11),
  d = c(NA,NA,NA, 12, 13)
)

最终的数据框应该是这样的

df.noNA <- data.frame(
  a = c("value1", "value2", "value3", "value4", "value5"),
  b = c("value1", 6, 7, "value4",8),
  c = c(9, "value2", "value3", 10, 11),
  d = c("value1","value2","value3", 12, 13)
)

有没有简单的方法可以做到这一点?

谢谢!

您可以使用 mutate 在每一列中应用 ifelse

library(dplyr)

df.NA %>%
   mutate(across(everything(), ~ ifelse(is.na(.x), a, .x)))
#>        a      b      c      d
#> 1 value1 value1      9 value1
#> 2 value2      6 value2 value2
#> 3 value3      7 value3 value3
#> 4 value4 value4     10     12
#> 5 value5      8     11     13

另一个可能的解决方案:

library(dplyr)

df.NA %>% 
  mutate(across(-a, ~ coalesce(.x, a)))

#>   a b  c  d
#> 1 1 1  9  1
#> 2 2 6  2  2
#> 3 3 7  3  3
#> 4 4 4 10 12
#> 5 5 8 11 13

在基础 R 中:

ids <- is.na(df.NA)

replace(df.NA, ids, df.NA[which(ids, TRUE)[,1],'a'])
      a      b      c      d
1 value1 value1      9 value1
2 value2      6 value2 value2
3 value3      7 value3 value3
4 value4 value4     10     12
5 value5      8     11     13