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

如何用R对员工数据集按年龄分组,统计人数与薪资中位数

R处理员工年龄薪资分组统计方案

不需要用循环,R里的分组聚合工具(比如dplyr或data.table)是处理这类需求的高效方案,适合你数千行的数据集。以下是两种实用实现方式:

方法一:使用tidyverse(dplyr)

先加载dplyr包,通过向量化的条件判断生成分组,再按分组聚合统计:

# 加载包(如果没安装先运行 install.packages("tidyverse"))
library(dplyr)

# 处理数据集,假设原数据集名为employee_data
result_df <- employee_data %>%
  # 生成年龄分组列:21以下→"Under 21",65以上→"Over65",其余保留原年龄(转字符统一类型)
  mutate(age_group = case_when(
    ageyears < 21 ~ "Under 21",
    ageyears > 65 ~ "Over65",
    TRUE ~ as.character(ageyears)
  )) %>%
  # 按年龄分组聚合
  group_by(age_group) %>%
  summarise(
    employee_count = n(),  # 统计每组人数
    median_salary = median(sal22, na.rm = TRUE)  # 计算薪资中位数,忽略缺失值
  ) %>%
  ungroup()  # 取消分组状态

# 查看结果
print(result_df)

关键说明:

  • case_when是向量化操作,比循环逐行判断快得多,适合大数据量
  • group_by() + summarise()是R中标准的分组统计范式,代码简洁且易维护
  • na.rm = TRUE避免因薪资列存在缺失值导致结果为NA

方法二:使用data.table(超大数据集首选)

如果你的数据集行数超过10万,data.table的处理速度会更有优势:

# 加载包(如果没安装先运行 install.packages("data.table"))
library(data.table)

# 转换为data.table格式(如果原数据集不是的话)
setDT(employee_data)

# 生成分组并统计
result_dt <- employee_data[, .(
  employee_count = .N,
  median_salary = median(sal22, na.rm = TRUE)
), by = .(age_group = case_when(
  ageyears < 21 ~ "Under 21",
  ageyears > 65 ~ "Over65",
  TRUE ~ as.character(ageyears)
))]

# 转换为普通数据框(可选)
result_df <- as.data.frame(result_dt)

为什么不推荐循环?

R的for循环是逐元素迭代,处理数千行数据时不仅代码冗余,效率也远低于向量化操作或分组聚合工具——上述两种方法都是基于底层优化的向量化计算,运行速度更快,代码可读性也更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:15:44