在R语言中基于多变量滞后组合创建CEO集团经验哑变量
R语言实现CEO任职前集团工作经验哑变量创建
需求说明
基于包含date、employee、company、rolename、company_conglomerate字段的员工数据,生成哑变量CEO_prior_conglomerate_experience,规则如下:
- 若当前记录为CEO职位:检查该员工在此记录日期之前是否有过
company_conglomerate=1的工作经验,有则赋值1,无则赋值0 - 非CEO记录直接赋值0
实现方案(dplyr版)
使用dplyr包按员工分组处理时间序列数据,步骤清晰易读:
- 加载依赖包
library(dplyr)
- 数据处理逻辑(假设数据框名为
employee_data)
employee_data <- employee_data %>% # 按员工分组,确保单员工记录单独处理 group_by(employee) %>% # 按日期升序排列,保证时间顺序正确 arrange(date, .by_group = TRUE) %>% mutate( # 计算当前记录前,员工累计的集团工作经验次数(当前记录不计入) prior_conglomerate_count = lag(cumsum(company_conglomerate == 1), default = 0), # 生成目标哑变量 CEO_prior_conglomerate_experience = case_when( rolename == "CEO" & prior_conglomerate_count >= 1 ~ 1, TRUE ~ 0 ) ) %>% # 移除临时中间变量(可选) select(-prior_conglomerate_count) %>% ungroup()
实现方案(data.table版)
如果处理大数据量,data.table的效率更高:
- 加载依赖包
library(data.table)
- 数据处理逻辑
setDT(employee_data) # 按员工分组,按日期排序后计算累计集团经验(当前记录前) employee_data[order(date), prior_conglomerate_count := shift(cumsum(company_conglomerate == 1), fill = 0), by = employee] # 生成目标变量 employee_data[, CEO_prior_conglomerate_experience := fifelse(rolename == "CEO" & prior_conglomerate_count >= 1, 1, 0)] # 移除临时变量 employee_data[, prior_conglomerate_count := NULL]
注意事项
- 确保
date字段为日期格式,若不是可先用employee_data$date <- as.Date(employee_data$date)转换,否则排序会出错 - 若同一员工同一天有多条记录,需根据实际业务逻辑调整排序规则(比如增加职位优先级排序)
内容的提问来源于stack exchange,提问作者fsure
相关产品推荐
相关产品推荐

