R:将因子变量中的 <NA> 替换为 0

R: replacing <NA> within factor variables as 0

我正在使用 R 编程语言。我有一个包含字符和数字变量的数据集 - 我试图用“0”替换此数据中的所有 NA 和空值。对于连续变量,NA/empty 值应替换为“数字 0”。对于因子变量,NA/empty 值应替换为“因子 0”。

过去,我曾经使用标准命令将所有 NA 替换为 0(在下面的代码中,“df”代表包含数据的数据框):

df[df == NA] <- 0

我在我的数据上尝试了上面的代码,但我仍然注意到在因子变量中,这段代码无法用 0 替换 <NA> 值。<NA> 仍然存在.

我尝试了几种方法:

第一种方法:

df[is.na(df)] <- 0

但这没有用:

Warning message: 
In '[<-.factor'('*tmp*',thisvar, value = 0):
invalid factor level, NA generated

第二种方法:我尝试了其中一个因子变量

library(car)
df$some_factor_var <- recode(df$some_factor_var, "NA = 0")

但这将“some_factor_var”中的每个值替换为 0

第三种方法:我再次尝试了其中一个因子变量

library(forcats)
fct_explicit_na(df$some_factor_var,0)

Error: Can't convert a double vector to a character vector

有人可以告诉我如何解决这个问题吗?有没有办法一次替换所有变量的所有 empty/missing/NA 值?

谢谢

对于因子变量,如果新水平 (0) 尚不存在,您需要先将其包含在数据中。

看这个例子-

df <- data.frame(a = factor(c(1, NA, 2, 5)), b = 1:4, 
                 c = c('a', 'b', 'c', NA), d = c(1, 2, NA, 1))

#Include 0 in the levels for "a" variable
levels(df$a) <- c(levels(df$a), 0)
#Replace NA to 0
df[is.na(df)] <- 0
df
#  a b c d
#1 1 1 a 1
#2 0 2 b 2
#3 2 3 c 0
#4 5 4 0 1

str(df)
#'data.frame':  4 obs. of  4 variables:
# $ a: Factor w/ 4 levels "1","2","5","0": 1 4 2 3
# $ b: int  1 2 3 4
# $ c: chr  "a" "b" "c" "0"
# $ d: num  1 2 0 1

使用 tidyverse,尝试:

library(tidyverse)

df <- 
  tibble(var_numeric = c(1,2,3,NA),
         var_factor = as.factor(c(4,5,6,NA)))

df %>% 
  replace_na(list(var_numeric = 0)) %>% 
  mutate(var_factor = fct_explicit_na(var_factor, "0"))

# A tibble: 4 x 2
  var_numeric var_factor
        <dbl> <fct>     
1           1 4         
2           2 5         
3           3 6         
4           0 0