You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 03:57:03