fct_recode将级别替换为NA

bttbmeg0  于 2023-04-18  发布在  其他
关注(0)|答案(3)|浏览(91)

我尝试使用forcats::fct_recode将R因子变量中的所有“a”替换为NA字符。这是我尝试的:

fct <- forcats::as_factor(c("a", "b"))
fct %>% forcats::fct_recode("c" = "a") #works
fct %>% forcats::fct_recode(NA = "a") #error
fct %>% forcats::fct_recode(NA_character_ = "a") #error

有没有一种方法可以通过fct_recode实现我的目标?

ozxc1zmp

ozxc1zmp1#

您需要使用反引号将值转换为NA

x1 <- fct %>% forcats::fct_recode(`NA` = "a") 
x1
#[1] NA b 
#Levels: NA b

然而,请注意,尽管这“看起来”像NA,但它不是真实的NA,而是字符串"NA"

is.na(x1)
#[1] FALSE FALSE

x1 == 'NA'
#[1]  TRUE FALSE

要使其成为真实的的NA,请将其替换为NULL

x2 <- fct %>% forcats::fct_recode(NULL = "a")
x2
#[1] <NA> b   
#Levels: b

is.na(x2)
#[1]  TRUE FALSE
cczfrluj

cczfrluj2#

我们可以使用na_if

library(dplyr)
fct %>%
   na_if('a') %>% 
   droplevels
#[1] <NA> b   
#Levels: b
hjzp0vay

hjzp0vay3#

另一种forcats解决方案是使用fct_na_level_to_value,它是专门为这个问题设计的:

fct %>% forcats::fct_na_level_to_value("a")

相关问题