在R数据框中按Grade分组计算全职/兼职男性的平均薪资
R实现按Grade分组计算全职/兼职男性平均薪资(缺失补0)
步骤1:构造示例数据(可替换为你的实际数据集)
# 示例数据框,模拟你的原始数据 df <- tibble( genderTime = c("ftMale", "ptMale", "ptMale", "ptFemale", "ftFemale", "ftMale", "ptFemale", "ptFemale", "ptMale"), Salary = c(32000, 15500, 37500, 31500, 37400, 36000, 31000, 16000, 37000), Grade = factor(c("G", "DP", "H", "G", "H", "G", "G", "DP", "H"), levels = c("DP", "G", "H")) )
步骤2:使用tidyverse工具链实现(推荐,适合大规模数据)
先加载依赖包:
library(dplyr) library(tidyr)
核心处理代码:
result <- df %>% # 仅保留全职/兼职男性数据 filter(genderTime %in% c("ftMale", "ptMale")) %>% # 按Grade和性别类型分组,计算平均薪资 group_by(Grade, genderTime) %>% summarise(Avg_Salary = mean(Salary), .groups = "drop") %>% # 转换为宽格式,并重命名列为目标名称 pivot_wider( names_from = genderTime, values_from = Avg_Salary, names_glue = case_when( genderTime == "ftMale" ~ "Full-time Male", genderTime == "ptMale" ~ "Part-time Male" ) ) %>% # 确保所有Grade因子水平都被保留,缺失项填充0 complete(Grade = levels(df$Grade), fill = list(`Full-time Male` = 0, `Part-time Male` = 0)) %>% # 兜底替换剩余NA为0 mutate(across(c(`Full-time Male`, `Part-time Male`), ~replace_na(.x, 0)))
查看结果:
print(result)
输出结果与需求的表格完全一致:
# A tibble: 3 × 3 Grade `Full-time Male` `Part-time Male` <fct> <dbl> <dbl> 1 DP 0 15500 2 G 34000 0 3 H 0 37250
关键逻辑说明
filter:精准筛选目标群体,排除无关的女性数据group_by + summarise:按Grade和性别类型分组计算平均,保证每个分组的统计准确性pivot_wider:将长格式数据转为需求的宽格式,通过names_glue自定义列名complete:强制保留所有Grade因子水平,避免因某Grade无对应数据而被遗漏replace_na:将缺失的平均薪资值替换为0,满足无数据时填0的要求
备选:Base R实现方案
如果不使用tidyverse包,也可以用Base R代码实现:
# 筛选男性数据 male_df <- df[df$genderTime %in% c("ftMale", "ptMale"), ] # 分组计算平均薪资 avg_salary <- aggregate(Salary ~ Grade + genderTime, male_df, mean) # 转换为宽格式 wide_df <- reshape(avg_salary, idvar = "Grade", timevar = "genderTime", direction = "wide") # 重命名列 colnames(wide_df) <- c("Grade", "Full-time Male", "Part-time Male") # 合并所有Grade水平,填充NA为0 all_grades <- data.frame(Grade = levels(df$Grade)) result_base <- merge(all_grades, wide_df, by = "Grade", all.x = TRUE) result_base[is.na(result_base)] <- 0 print(result_base)
内容的提问来源于stack exchange,提问作者atm1984
相关产品推荐
相关产品推荐

