如何在R中将Work_Titles列47种职位分组映射至emp_class
R实现职位分类与后续统计操作方案
步骤1:完成职位名称到emp_class的映射
推荐两种新手易操作的实现方式:
方式1:使用dplyr的case_when函数(规则直观易维护)
# 先加载依赖包 library(dplyr) # 假设你的原始数据表命名为df df <- df %>% mutate(emp_class = case_when( # 按你的规则逐条写匹配逻辑 Work_Titles %in% c("VP Human Resources", "VP Finance", "CEO") ~ "Executive_Titles", Work_Titles %in% c("Meats Manager", "Stores Manager", "Produce Manager") ~ "cl_managers", # 剩余40余种职位按上述格式补全匹配规则即可 .default = "Other" # 未匹配到的职位统一归为其他类,避免出现空值 ))
方式2:使用命名向量映射(规则量大时代码更简洁)
# 先构建职位到分类的映射向量 title_map <- c( "VP Human Resources" = "Executive_Titles", "VP Finance" = "Executive_Titles", "CEO" = "Executive_Titles", "Meats Manager" = "cl_managers", "Stores Manager" = "cl_managers", "Produce Manager" = "cl_managers" # 补全剩余所有职位的映射关系 ) # 直接批量赋值分类 df$emp_class <- title_map[df$Work_Titles] # 处理未匹配到的空值 df$emp_class[is.na(df$emp_class)] <- "Other"
步骤2:为各emp_class设置统一薪资标准
# 方法1:直接用case_when赋值 df <- df %>% mutate(standard_salary = case_when( emp_class == "Executive_Titles" ~ 250000, # 替换为你实际设定的薪资数值 emp_class == "cl_managers" ~ 120000, emp_class == "Other" ~ 70000 )) # 方法2:如果分类多可以单独做薪资映射表,用左连接匹配,后续改薪资更方便 salary_rule <- data.frame( emp_class = c("Executive_Titles", "cl_managers", "Other"), standard_salary = c(250000, 120000, 70000) ) df <- left_join(df, salary_rule, by = "emp_class")
步骤3:统计各分类的离职次数
假设你的数据表中terminations字段取值为1代表离职、0代表在职:
# 分组统计方法,输出结果为结构化数据表 term_stats <- df %>% group_by(emp_class) %>% summarise(termination_count = sum(terminations, na.rm = TRUE)) # na.rm=TRUE可忽略空值避免计算错误 # 基础R快速统计方法 term_count_table <- table(df$emp_class, df$terminations)[, "1"]
注意事项
- 做映射前先执行
unique(df$Work_Titles)导出全部47种职位名称,对照着写规则避免遗漏 - 映射完成后执行
table(df$emp_class, useNA = "ifany")检查是否存在空值,确认所有职位都完成分类
内容的提问来源于stack exchange,提问作者Hansaka Costa
相关产品推荐
相关产品推荐

