在R中如何将因子变量的指定水平替换为缺失值?
报错原因
droplevels() 仅支持输入因子或包含因子的数据集,你传入的 levels(df$attend)[4] 是字符串类型,因此触发类型不匹配报错。此外该函数的作用是删除因子中没有对应观测的冗余水平,无法直接将现有水平的观测转为缺失值,逻辑上也不符合你的需求。
正确实现方法
基础R实现(无需加载额外包)
两种写法都可以实现需求:
- 赋值替换后删除空水平
# 将attend列取值为iap的位置设为缺失值 df$attend[df$attend == "iap"] <- NA # 移除已经没有对应观测的iap水平 df$attend <- droplevels(df$attend)
- 直接修改因子水平映射(写法更简洁)
# 直接将iap这个水平映射为NA,R会自动移除对应的空水平 levels(df$attend)[levels(df$attend) == "iap"] <- NA
tidyverse生态实现
如果你使用forcats包处理因子,可以直接调用fct_na_level()方法:
library(forcats) df$attend <- fct_na_level(df$attend, "iap")
处理结果验证
处理后df$attend的水平仅保留yes、no,原取值为iap的位置变为NA,对应行的sex列数据不受影响,符合你不删除整行的要求。
内容的提问来源于stack exchange,提问作者wurumurra
相关产品推荐
相关产品推荐

