使用dplyr分组条件过滤:筛选男女数量均不少于5人的职业
R语言实现过滤两性人数均达标的职业数据
问题原因
你当前的代码同时按professions和sex两个字段分组,统计的是单个职业下单个性别对应的人数,过滤条件也仅校验了单性别的人数阈值,只会保留满足单性别≥5的分组,无法实现「同一职业下两个性别都满足人数要求」的校验逻辑。
修正方案
方案1:单链式操作直接过滤
library(dplyr) df %>% # 先按职业维度分组 group_by(professions) %>% # 统计当前职业下的女性、男性人数,na.rm = TRUE可跳过空值避免统计错误 mutate( female_cnt = sum(sex == "女性", na.rm = TRUE), male_cnt = sum(sex == "男性", na.rm = TRUE) ) %>% # 仅保留两性人数都≥5的职业的所有记录 filter(female_cnt >= 5 & male_cnt >= 5) %>% # 可选:如果需要输出各职业分性别人数统计,取消注释下行 # group_by(professions, sex) %>% summarize(count = n(), .groups = "drop")
提示:如果你的sex字段存储的是英文标识(如F/M),将条件判断中的取值替换为实际字段值即可。
方案2:先筛选合法职业再关联原数据
如果数据量较大,该方案可读性和运行效率更高:
# 第一步:统计各职业分性别人数,筛选出两性人数都≥5的职业列表 valid_professions <- df %>% count(professions, sex) %>% group_by(professions) %>% # 要求该职业下所有性别分组的人数都≥5 filter(all(n >= 5)) %>% pull(professions) %>% unique() # 第二步:从原数据中过滤出合法职业的所有记录 df_filtered <- df %>% filter(professions %in% valid_professions)
内容的提问来源于stack exchange,提问作者Adel
相关产品推荐
相关产品推荐

