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

求助:用R语言计算薪资年度演变、AAGR及补涨情况分析

薪资数据分析解决方案

可复现数据集

首先加载示例数据(仅2017年,后续会扩展为2017-2021年):

original_df <- structure(list(numero = c("133", "62", "75", "76", "86", "281"), tranche_age = c("20-30", "20-30", "20-30", "20-30", "20-30", "20-30"), tranche_anciennete = c("5 ans et moins", "5 à 10 ans", "5 ans et moins", "5 ans et moins", "5 à 10 ans", "5 à 10 ans"), code_statut = c("C", "E", "E", "E", "E", "E"), code_contrat = c("A", "A", "A", "A", "A", "A"), taux_demploi_mois = c(100, 100, 100, 100, 100, 100), echelon = c("E1", NA, NA, NA, NA, NA), niveau = c("N7", NA, NA, NA, NA, NA), brut_mensuel = c(NA, 786.13, 1156.95, 1156.95, 904.79, 904.79), estimation_annuelle = c(NA, 10219.69, 15040.35, 15040.35, 11762.27, 11762.27), annee = c(2017, 2017, 2017, 2017, 2017, 2017), primes_en_montant = c(0, 0, 0, 0, 0, 0), primes_en_pourcentage = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), brut_mensuel_ETP = c(NA, 786.13, 1156.95, 1156.95, 904.79, 904.79)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"))

需求说明

  • 新增变量,计算2017-2021年每位工人estimation_annuelle的年度演变(变化绝对值+涨幅百分比)
  • 计算5年的年均增长率(AAGR)
  • 筛选年度涨幅低于2%的工人,分析后续年份的补涨情况及幅度

原代码问题分析

你尝试的代码存在以下问题:

  1. group_by(annee, numero)会将每个工人的单一年份作为分组,无法跨年度计算薪资变化
  2. 循环未按工人分组,会混淆不同工人的年份数据,导致计算逻辑错误
  3. 未处理estimation_annuelle为NA的情况,会引发计算异常
# 原错误代码
test <- liste_complete %>%
   group_by(annee, numero) %>%
   select(numero, annee, estimation_annuelle)%>%
   data.frame()

for(i in 1:length(test$estimation_annuelle)) {
  print((test[i+1,] - test[i,])/test[i,])
}

完整解决方案

1. 扩展数据集为2017-2021年

原数据仅包含2017年,先模拟生成2018-2021年的薪资数据(添加随机涨幅模拟真实场景):

library(dplyr)
set.seed(123) # 设置随机种子保证结果可复现

liste_complete <- lapply(2017:2021, function(year) {
  original_df %>%
    mutate(
      annee = year,
      # 模拟薪资年度变化:-1%到5%的随机涨幅
      estimation_annuelle = ifelse(
        !is.na(estimation_annuelle),
        round(estimation_annuelle * (1 + runif(nrow(.), -0.01, 0.05)), 2),
        NA
      )
    )
}) %>% bind_rows()

2. 计算年度薪资演变

按工人分组,按年份排序后,用lag()函数计算年度变化:

liste_complete <- liste_complete %>%
  group_by(numero) %>%
  arrange(annee) %>%
  mutate(
    # 年度薪资变化绝对值
    var_abs = estimation_annuelle - lag(estimation_annuelle),
    # 年度涨幅百分比(保留2位小数)
    var_pct = round((var_abs / lag(estimation_annuelle)) * 100, 2)
  ) %>%
  ungroup()

3. 计算年均增长率(AAGR)

AAGR为各年度涨幅的算术平均值(排除NA值):

aagr_result <- liste_complete %>%
  group_by(numero) %>%
  summarise(
    aagr = round(mean(var_pct, na.rm = TRUE), 2),
    # 统计有效数据的年份数
    valid_years = n_distinct(annee[!is.na(estimation_annuelle)])
  ) %>%
  ungroup()

4. 筛选低涨幅工人并分析补涨

筛选年度涨幅低于2%的记录,再分析后续年份的补涨情况:

# 筛选年度涨幅<2%的记录
low_growth_records <- liste_complete %>%
  filter(!is.na(var_pct), var_pct < 2) %>%
  select(numero, annee, estimation_annuelle, var_pct)

# 分析后续年份补涨情况
catch_up_analysis <- low_growth_records %>%
  group_by(numero) %>%
  arrange(annee) %>%
  mutate(
    # 下一年的涨幅
    next_year_pct = lead(var_pct),
    # 相对于低涨幅年份的总补涨幅度
    catch_up_pct = round(((lead(estimation_annuelle) / estimation_annuelle) - 1) * 100, 2)
  ) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:48:14