R语言:如何将因子的'Dont know'和'Refuse'水平转为缺失值?
解决因子水平转缺失值的问题
你用fct_collapse指定NULL达不到效果,是因为这个函数会把NULL当作新的因子水平名称,而不是识别为缺失值。要把"Dont know"和"Refuse"转成缺失值,推荐以下几种方法:
方法一:用fct_recode的.missing参数(最简洁)
fct_recode里的.missing参数专门用来将指定水平映射为缺失值,配合count的useNA = "ifany"可以统计缺失值的数量:
library(tidyverse) mydata <- tibble( a = factor(c("Yes", "No", "Dont know", "Yes", "Refuse", "No", "Dont know", "Yes", "No", "Dont know", "Refuse")) ) mydata %>% mutate(a = fct_recode(a, .missing = c("Dont know", "Refuse"))) %>% count(a, useNA = "ifany")
运行结果:
# # A tibble: 3 × 2 # a n # <fct> <int> # 1 No 3 # 2 Yes 3 # 3 <NA> 5
方法二:先转字符再替换为NA
先把因子转为字符向量,替换目标值为NA后再转回因子:
mydata %>% mutate( a = as.character(a), a = case_when( a %in% c("Dont know", "Refuse") ~ NA_character_, TRUE ~ a ), a = factor(a) ) %>% count(a, useNA = "ifany")
这个方法逻辑直观,适合需要额外条件判断的场景。
方法三:用fct_collapse结合na_if
先把目标水平合并为一个临时水平,再用na_if把这个临时水平转为NA:
mydata %>% mutate( a = fct_collapse(a, temp = c("Dont know", "Refuse")), a = na_if(a, "temp") ) %>% count(a, useNA = "ifany")
这种方法适合需要先合并再处理的复杂场景。
内容的提问来源于stack exchange,提问作者Moses
相关产品推荐
相关产品推荐

