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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 21:53:17