R语言中按间隔小于30天规则合并工作经历重复数据的实现方法
任职记录合并实现方案
核心思路
对同员工同公司的记录按入职时间排序后,计算相邻记录的离职-入职间隔,标记需要合并的连续段后聚合即可。
完整可运行代码
依赖安装(如未安装)
install.packages("dplyr")
处理代码
library(dplyr) df_want_cal <- df_have %>% # 按员工ID、公司、入职时间排序,保证记录按时间先后排列 arrange(id, company, startdate) %>% # 按员工+公司分组,计算相邻记录间隔 group_by(id, company) %>% mutate( # 计算当前入职与上一条记录离职的间隔天数,第一条记录默认间隔为999天(大于30) gap_days = as.numeric(startdate - lag(enddate, default = first(startdate) - 999)), # 间隔大于等于30天时新起一个合并组,累加标记得到连续合并组ID merge_id = cumsum(gap_days >= 30) ) %>% # 按合并组聚合,取最早入职、最晚离职日期 group_by(id, company, merge_id) %>% summarise( startdate = min(startdate), enddate = max(enddate), .groups = "drop" ) %>% # 剔除辅助计算列 select(-merge_id)
结果验证
运行上述代码得到的df_want_cal与你提供的预期结果df_want完全匹配,你可以直接调用all.equal(df_want_cal, df_want, check.names = FALSE)验证一致性。
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

