R语言如何根据员工连续任职情况为新变量赋值
解决方案
方案1:使用dplyr(推荐,代码可读性高)
首先加载依赖包:
library(dplyr)
核心实现代码:
# 示例数据构造,可替换为你自己的数据集 df <- data.frame( Company = rep(c("A", "B"), each = 5), Year = rep(2011:2015, 2), Employeeid = c(2,2,1,3,4,8,1,19,19,19) ) df <- df %>% # 按公司、员工ID分组,组内按年份排序 group_by(Company, Employeeid) %>% arrange(Year, .by_group = TRUE) %>% # 只要该员工存在连续两年任职记录,所有行标记为1,否则为0 mutate(variableA = as.integer(any(lead(Year) - Year == 1, na.rm = TRUE))) %>% ungroup()
运行后得到的variableA完全匹配需求。
方案2:基础R实现(无需安装第三方包)
# 先按公司、员工ID、年份排序 df <- df[order(df$Company, df$Employeeid, df$Year), ] # 分组计算标记 df$variableA <- as.integer(ave(df$Year, df$Company, df$Employeeid, FUN = function(x) { any(diff(x) == 1) }))
逻辑说明
两种方案的核心逻辑一致:
- 按「公司+员工ID」分组,确保判断的是同一个员工在同一家公司的任职记录
- 计算该员工所有任职年份的相邻差值,只要存在差值为1的情况,就说明有连续两年任职记录
- 同组所有观测统一标记为1,否则标记为0
相比双层循环,分组操作的代码更简洁,处理大数据集时效率也更高。
内容的提问来源于stack exchange,提问作者Ghazlie
相关产品推荐
相关产品推荐

