dplyr分组统计后COUNT.x/COUNT.freq列无法调用pivot_wider问题求解
问题根源
你在dplyr::summarise()中嵌套调用count()的写法存在问题:count()返回的是包含分组字段和频次列的 tibble 结构,不是单个数值,因此你生成的COUNT列是嵌套数据框列,打印时会自动展开显示嵌套内部的x(对应你的EDUCATION字段值)和freq(对应统计频次)字段,显示为COUNT.x、COUNT.freq,但这两个是COUNT列的内部子字段,不是df的顶层列,因此names(df)无法查到,调用pivot_wider时自然会报列不存在的错误。
解决方案
方案1:修复原始统计代码(最推荐)
直接调整统计逻辑,生成标准的扁平结构数据框再转宽表:
# 正确分组统计写法,直接按维度+EDUCATION分组计数即可 df_new <- df %>% dplyr::group_by(QUARTER, PROVINCE, DATE, EDUCATION) %>% dplyr::summarise(COUNT = n(), .groups = "drop") # 执行宽表转换 df_wide <- df_new %>% tidyr::pivot_wider(names_from = EDUCATION, values_from = COUNT, values_fill = 0)
方案2:直接处理现有嵌套列数据
如果不想重新跑统计代码,可以先把嵌套的COUNT列拆成顶层列再转宽:
# 解除嵌套得到扁平结构 df_flat <- tidyr::unnest(df, cols = COUNT) # 执行宽表转换 df_wide <- df_flat %>% tidyr::pivot_wider(names_from = x, values_from = freq, values_fill = 0)
内容的提问来源于stack exchange,提问作者teller.py3
相关产品推荐
相关产品推荐

