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

使用dplyr的count()函数时,如何包含零计数的指定Majors?

问题与解决方案

问题描述

现有代码运行正常,但希望输出中包含计数为0的POLS专业。尝试在count()中添加.drop=FALSE未生效,相关数据与现有代码如下:

数据

#DATA
Sum22_Graduation_MajorsALL <- data.frame(Sum_2022_Graduation.Major_1 =c('CRJS', 'CRJS', 
'ENGL', 'ENGL', 'JOE', 'DAN', 'HIST', 'PPE'), Sum_2022_Graduation.Major_2 =c('JOE', 'DAN', 'ENGL', 
'HIST', 'PPE', 'CRJS', 'CRJS', 'PPE'))

现有代码

#CODE SO FAR
Sum22_selectCOHSSgrad <- Sum22_Graduation_MajorsALL %>%
    select(Sum_2022_Graduation.Major_1, Sum_2022_Graduation.Major_2) %>%
    pivot_longer(cols = everything(), names_to = NULL, values_to = 'Majors') %>%
    filter(Majors=='CRJS' | Majors=='ENGL' | Majors=='HIST' | Majors=='POLS' | Majors=='PPE') %>%
    count(Majors, name = "Count") 

由于POLS不存在于原始数据中,输出完全不包含该专业,期望显示POLS.......0。

问题原因

.drop=FALSE仅对因子类型的变量生效,且要求变量本身包含目标类别(即使没有对应观测)。你的代码中,filter步骤直接过滤掉了所有非目标专业,而原始数据中根本没有POLS,过滤后数据里完全不存在POLS这个值,因此count()无法生成该类别的计数。

解决方法

提供两种可行方案:

方案一:将Majors转换为指定levels的因子

先把Majors转换成包含所有目标专业的因子,再过滤掉无关专业,最后用.drop=FALSE保留所有因子水平:

Sum22_selectCOHSSgrad <- Sum22_Graduation_MajorsALL %>%
    select(Sum_2022_Graduation.Major_1, Sum_2022_Graduation.Major_2) %>%
    pivot_longer(cols = everything(), names_to = NULL, values_to = 'Majors') %>%
    # 定义包含所有目标专业的因子水平
    mutate(Majors = factor(Majors, levels = c('CRJS', 'ENGL', 'HIST', 'POLS', 'PPE'))) %>%
    # 过滤掉不在目标列表中的专业(如JOE、DAN)
    filter(!is.na(Majors)) %>%
    # 使用.drop=FALSE保留所有因子水平
    count(Majors, name = "Count", .drop = FALSE)

方案二:用complete()补全缺失专业

先过滤出目标专业并计数,再用complete()补全所有目标专业,缺失的计数填0:

# 定义目标专业列表
target_majors <- c('CRJS', 'ENGL', 'HIST', 'POLS', 'PPE')

Sum22_selectCOHSSgrad <- Sum22_Graduation_MajorsALL %>%
    select(Sum_2022_Graduation.Major_1, Sum_2022_Graduation.Major_2) %>%
    pivot_longer(cols = everything(), names_to = NULL, values_to = 'Majors') %>%
    filter(Majors %in% target_majors) %>%
    count(Majors, name = "Count") %>%
    # 补全所有目标专业,缺失计数填充为0
    complete(Majors = target_majors, fill = list(Count = 0))

两种方案均能输出包含POLS且计数为0的结果,可根据个人习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:45:00