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

在R中基于字符串值将多水平分类变量重分组为5组的方法

高效实现分类变量按关键词分组降维

核心思路

用关键词-分组映射表替代零散的str_detect/grepl判断,既方便维护,又能通过批量匹配提升效率,尤其适合1000+水平的分类变量。


方法1:dplyr + fuzzyjoin(易维护,适合中等数据量)

通过正则匹配批量关联关键词与分组,无需嵌套多层条件判断:

  1. 定义关键词映射表(可随时调整关键词/分组名称)
library(dplyr)
library(fuzzyjoin)

# 自定义5个目标分组的关键词映射
group_mapping <- tibble(
  keyword = c("immune", "eyes", "cardio", "respiratory", "neuro"),
  group = c("immune group", "eye group", "cardiovascular group", "respiratory group", "neurological group")
)
  1. 批量匹配并分组
# 假设你的原始数据框为df,分类变量列名为category
df_processed <- df %>%
  # 按正则匹配分类变量与关键词
  regex_left_join(group_mapping, by = c("category" = "keyword")) %>%
  # 未匹配到关键词的归为"other group"
  mutate(group = coalesce(group, "other group")) %>%
  # 清理临时列
  select(-keyword)

优化点:如果存在多关键词重叠(如某分类同时包含"immune"和"eyes"),调整group_mapping的行顺序即可设置匹配优先级(先出现的关键词优先匹配)。


方法2:data.table(超高效,适合大数据量)

利用data.table的快速索引和模糊匹配,处理1000+水平的速度更快:

library(data.table)

# 转换为data.table格式
setDT(df)
setDT(group_mapping)

# 初始化分组为"other group"
df[, group := "other group"]

# 按顺序匹配关键词(优先级由行顺序决定)
for (i in seq(nrow(group_mapping))) {
  df[category %like% group_mapping$keyword[i], group := group_mapping$group[i]]
}

额外处理:大小写统一

若分类变量存在大小写不一致的情况,先统一转换为小写避免匹配遗漏:

df <- df %>%
  mutate(category_clean = tolower(category)) %>%
  regex_left_join(group_mapping %>% mutate(keyword = tolower(keyword)), 
                  by = c("category_clean" = "keyword")) %>%
  mutate(group = coalesce(group, "other group")) %>%
  select(-category_clean, -keyword)

内容的提问来源于stack exchange,提问作者statquest

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:01:19