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
我正在使用 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