如何用另一列中的值替换 NA

问题描述 投票:0回答:4

我想用变量

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)
)

有没有简单的方法可以实现这一目标?

谢谢!

r dataframe na
4个回答
3
投票

您可以使用

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

3
投票

另一种可能的解决方案:

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

2
投票

在基础 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

0
投票

您还可以在

base R
中执行一个简单的 for 循环:

for (i in 2:ncol(df.NA)) {
    df.NA[i][is.na(df.NA[i])] = df.NA[1][is.na(df.NA[i])]
    }
© www.soinside.com 2019 - 2024. All rights reserved.