R语言如何批量对多列应用ifelse逻辑生成分类新列
R语言批量处理多列职位分类实现方案
核心思路
把重复的分类逻辑封装为独立函数,再批量应用到4个职位名称列,自动生成对应的分类列,避免重复编写冗余代码。
步骤1:定义匹配规则与处理函数
首先把你原有的分类优先级和关键词抽离为规则向量,再编写通用的分类函数:
# 加载需要的包(基础R方案可跳过) library(dplyr) library(stringr) library(purrr) # 定义分类规则,顺序和你原有的优先级保持一致,优先级高的放前面 category_rules <- c( "1" = "frontend|ui|ux", "2" = "backend", "3" = "fullstack", "4" = "entwickler|development|application|developer|software", "5" = "data|analytics|machine|programmer|ml|engineer|engineering|learning", "6" = "research|teaching|akademischer|researcher", "7" = "project|manager|product|consultant|consulting", "8" = "it|security|technical|tech", "9" = "marketing|sales|media|saas|business|commerce|support|digital|graphic|designer|graphics|design", "10" = "founder|ceo|partner|chief|executive|cto" ) # 备注:原代码里的margketing、markeing为拼写错误,以上已经修正为marketing,你可以按需调整 # 编写通用分类函数 get_job_category <- function(job_vec) { map_dbl(job_vec, function(x) { if (is.na(x)) return(NA_real_) # 按优先级匹配,返回第一个命中的分类 for (i in seq_along(category_rules)) { # ignore.case设置为TRUE表示忽略大小写,要严格匹配大小写可改为FALSE if (grepl(category_rules[i], x, ignore.case = TRUE)) { return(as.numeric(names(category_rules)[i])) } } # 未匹配到任何规则返回NA return(NA_real_) }) }
步骤2:批量应用到所有职位列
方案1:dplyr写法(推荐,代码更简洁易维护)
# 批量处理job1-job4,自动生成category1-category4列 data_rel <- data_rel %>% mutate(across(starts_with("job"), .fns = get_job_category, .names = "category{str_extract(.col, '\\\\d+')}"))
方案2:基础R写法(不需要加载第三方包)
# 提取所有job列的索引 job_cols <- grep("^job", names(data_rel)) # 循环生成对应分类列 for (i in seq_along(job_cols)) { data_rel[[paste0("category", i)]] <- get_job_category(data_rel[[job_cols[i]]]) }
后续维护提示
后续如果需要调整分类规则、增减分类,只需要修改category_rules向量即可,不需要调整逻辑代码,维护成本远低于逐列写嵌套ifelse。
内容的提问来源于stack exchange,提问作者Theresa_S
相关产品推荐
相关产品推荐

