You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:45:23