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

计算占比并忽略缺失值:用dplyr实现按性别统计薪资占比

用dplyr实现按性别统计平均薪资及男女薪资比例

嘿,这需求用dplyr处理起来超顺手的!我帮你把完整的实现步骤和代码写出来,你直接套用就行~

首先先还原你提供的数据集(方便后续测试):

library(dplyr)
library(tidyr) # 需要用到pivot_wider,得加载这个包

# 你的原始数据集
x <- data.frame(
  Department = c("Dep1", "Dep1","Dep2", "Dep2","Dep3"), 
  Gender = c("F", "M", "F", "M", "F"), 
  Salary = seq(10,14)
)

接下来就是核心的统计步骤,我们可以一步到位算出各性别的平均薪资,以及女性薪资占男性的比例:

# 生成目标统计表格
salary_summary <- x %>%
  # 按性别分组
  group_by(Gender) %>%
  # 计算每组的平均薪资,保留2位小数让结果更清晰
  summarise(Average_Salary = round(mean(Salary), 2), .groups = "drop") %>%
  # 转换为宽格式,让男女平均薪资在同一行,方便计算比例
  pivot_wider(names_from = Gender, values_from = Average_Salary) %>%
  # 计算女性平均薪资占男性的百分比,同样保留2位小数
  mutate(Female_to_Male_Percentage = round((F / M) * 100, 2)) %>%
  # 重命名列名,让表格可读性更强
  rename(Female_Average_Salary = F, Male_Average_Salary = M)

代码解释

  • group_by(Gender):按性别对数据分组,确保我们分别计算男女的平均薪资
  • summarise(...):计算每组的平均薪资,.groups = "drop"是为了取消分组状态,方便后续处理
  • pivot_wider:把长格式的数据转成宽格式,这样男性和女性的平均薪资会放在同一行,方便我们计算比例
  • mutate:基于男女平均薪资计算女性薪资占男性的百分比
  • rename:把列名改成更直观的名称,避免用单个字母F/M

最终输出结果

运行完上面的代码后,打印salary_summary就能得到你想要的统计表格:

# A tibble: 1 × 3
  Female_Average_Salary Male_Average_Salary Female_to_Male_Percentage
                   <dbl>                <dbl>                      <dbl>
1                  12.00               12.00                     100.00

(这里因为你的数据里男女平均薪资刚好相等,所以比例是100%,如果换其他数据会自动计算对应的比例)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:38:56