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

基于日期范围生成年度哑变量,计算员工流动数据的方法问询

员工流动分析解决方案

一、高效统计年度雇佣/离职人数(无需手动生成哑变量)

生成哑变量会导致数据框过度冗余,更高效的方式是直接统计年度雇佣和离职人数,再构建完整的年度汇总表:

# 加载所需包
library(lubridate)
library(tidyverse)

# 1. 统计每年雇佣人数
hire_summary <- ssh %>%
  count(hireyear, name = "NumberHired") %>%
  rename(Year = hireyear)

# 2. 统计每年离职人数(排除未离职的NA值)
exit_summary <- ssh %>%
  filter(!is.na(exityear)) %>%
  count(exityear, name = "NumberExited") %>%
  rename(Year = exityear)

# 3. 创建1972-2023完整年份序列
full_year_range <- tibble(Year = 1972:2023)

# 4. 合并数据并计算净变化、累计员工数
annual_flow <- full_year_range %>%
  left_join(hire_summary, by = "Year") %>%
  left_join(exit_summary, by = "Year") %>%
  # 填补无雇佣/离职年份的0值
  mutate(
    NumberHired = replace_na(NumberHired, 0),
    NumberExited = replace_na(NumberExited, 0),
    NetChange = NumberHired - NumberExited,
    # 累计员工总数是逐年累加净变化
    CurrentTotal = cumsum(NetChange)
  )

运行上述代码后,annual_flow就是你需要的年度汇总表,包含Year、NumberHired、NumberExited、NetChange、CurrentTotal所有字段。

二、若需生成年度哑变量(可选)

如果确实需要生成每个年份的雇佣/离职哑变量列,可以用dplyr::across批量生成,无需手动写每一行ifelse:

# 定义年份范围
target_years <- 1972:2023

# 生成雇佣哑变量(hiredXXXX格式)
ssh <- ssh %>%
  mutate(
    across(all_of(target_years), ~ as.integer(hireyear == .x), .names = "hired{.x}")
  )

# 生成离职哑变量(exitedXXXX格式)
ssh <- ssh %>%
  mutate(
    across(all_of(target_years), ~ as.integer(exityear == .x), .names = "exited{.x}")
  )

说明

  • 优先推荐第一种方法:避免生成冗余列,计算效率更高,且符合tidy数据规范,后续分析更便捷。
  • 第二种方法生成的哑变量列,可通过colSums统计年度总数,比如colSums(ssh %>% select(starts_with("hired"))),但远不如第一种方法直接。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:33:17