计算占比并忽略缺失值:用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
相关产品推荐
相关产品推荐

