如何在R中基于两个分类变量的滞后条件匹配生成哑变量
在R中生成外部招聘/内部晋升哑变量的实现方案
根据你给出的规则,核心判断逻辑为:员工当前任职若为同一家公司的连续职位变动则标记为内部晋升(0),其余情况(包括首次入职后离开、从其他公司加入、离开原公司后返回)标记为外部招聘(1)。以下是具体实现步骤:
实现代码
# 加载dplyr包(未安装则自动安装) if (!requireNamespace("dplyr", quietly = TRUE)) { install.packages("dplyr") } library(dplyr) # 假设你的数据框名为employee_data employee_data <- employee_data %>% # 按员工分组,确保同一员工的记录按时间顺序排列 group_by(employee_name) %>% arrange(date, .by_group = TRUE) %>% # 生成上一条、下一条记录的公司名称,用于判断连续任职状态 mutate( prev_company = lag(company_name), next_company = lead(company_name) ) %>% # 生成outsider_dummy哑变量 mutate(outsider_dummy = case_when( # 上一家公司与当前公司相同→内部晋升 prev_company == company_name ~ 0, # 首次任职且后续仍在同一家公司→内部晋升 is.na(prev_company) & next_company == company_name ~ 0, # 首次任职但后续离开当前公司→外部招聘 is.na(prev_company) & next_company != company_name ~ 1, # 其余情况(上一家公司与当前不同)→外部招聘 TRUE ~ 1 )) %>% # 取消分组 ungroup()
规则匹配验证
- Morgan(始终在A公司):所有记录要么是连续同公司,要么是首次任职且后续留任,因此
outsider_dummy全为0 - Zoe(先后在B、C公司):首次任职B后离开,后续任职C与上一家公司不同,因此
outsider_dummy全为1 - John(A→A→B→A):前两条连续同公司标记为0,任职B与上一家A不同标记为1,返回A与上一家B不同标记为1,完全匹配你的描述
内容的提问来源于stack exchange,提问作者fsure
相关产品推荐
相关产品推荐

