如何用dplyr一次性删除数据框中所有因子变量的未使用水平?
一次性删除数据框中所有因子的未使用水平(dplyr实现)
当然可以一次性处理数据框中所有因子变量的未使用水平,结合dplyr的across()函数和forcats的fct_drop()就能轻松实现,无需逐个变量手动操作。
完整示例代码
library(dplyr) library(forcats) # 原始数据 x <- data.frame( region = factor(c('P1', 'P2', 'P3', 'P4', 'P5')), country = factor(c('C1', 'C2', 'C3', 'C4', 'C5')), sales = c(103, 106, 202, 257, 324) ) # 过滤数据后,因子存在未使用水平 x1 <- filter(x, sales < 250) # 一次性清理所有因子的未使用水平 x1_clean <- x1 %>% mutate(across(where(is.factor), fct_drop)) # 验证结果 levels(x1_clean$region) # 仅保留 P1, P2, P3 levels(x1_clean$country) # 仅保留 C1, C2, C3
代码说明
across(where(is.factor)): 自动定位数据框中所有类型为因子的列,where(is.factor)是谓词函数,用于筛选符合条件的列。fct_drop: 对每个选中的因子列执行删除未使用水平的操作。- 管道符
%>%串联操作,保持代码简洁可读。
如果习惯旧版dplyr语法,也可使用已被across取代但仍兼容的mutate_at:
x1_clean <- x1 %>% mutate_at(vars(where(is.factor)), fct_drop)
内容的提问来源于stack exchange,提问作者ebay
相关产品推荐
相关产品推荐

