R语言:双分类变量可视化及特定条件数据筛选问题
解决方案
1. 错误原因分析
你之前的筛选代码存在两个核心问题:
- 用
&连接dplyr管道是错误操作,&是逻辑运算符,无法实现数据流转; - 第一次
count(jobtitle)后,数据集仅保留jobtitle和计数列n,原数据的gender_preferences列已丢失,因此后续调用count(gender_preferences)会触发“变量未找到”的报错。
2. 正确处理流程
要实现“仅保留同时具备至少两类性别偏好观测数据的职业”并绘制平均月薪的分组柱状图,需按以下步骤操作:
步骤1:加载依赖包
library(dplyr) library(ggplot2)
步骤2:数据清洗与汇总
先过滤掉工资缺失的样本,再按职业和性别偏好分组计算平均月薪:
# 计算每个职业-性别偏好组合的平均月薪,过滤工资缺失值 salary_summary <- job_posts %>% filter(!is.na(monthly_income)) %>% group_by(jobtitle, gender_preferences) %>% summarize(avg_monthly_income = mean(monthly_income), .groups = "drop")
步骤3:筛选符合条件的职业
找出那些至少包含2种不同性别偏好数据的职业:
# 获取满足条件的职业列表 valid_jobs <- salary_summary %>% group_by(jobtitle) %>% filter(n_distinct(gender_preferences) >= 2) %>% pull(jobtitle) %>% unique() # 筛选出仅包含符合条件职业的数据集 final_data <- salary_summary %>% filter(jobtitle %in% valid_jobs)
步骤4:绘制分组柱状图
ggplot(final_data, aes(x = jobtitle, y = avg_monthly_income, fill = gender_preferences)) + geom_bar(position = "dodge", stat = "identity") + # 旋转x轴标签避免重叠 theme(axis.text.x = element_text(angle = 45, hjust = 1))
补充说明
- 你最初的ggplot代码未计算平均月薪,直接使用原始观测的工资值,
stat="identity"会将所有样本的工资叠加显示,而非展示平均值,因此必须先通过group_by()和summarize()完成汇总。 - 基于你提供的示例数据,由于每个职业仅对应1种性别偏好(除工资缺失的样本),最终筛选后的
final_data会是空集,需确保你的完整数据中存在同时具备多类性别偏好的职业。
内容的提问来源于stack exchange,提问作者nesta1990
相关产品推荐
相关产品推荐

