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

使用dplyr的group_by()和summarise()时,数据框中因子水平'July'无法被识别的问题求助

使用dplyr的group_by()和summarise()时,数据框中因子水平'July'无法被识别的问题求助

嗨,Alice!这种问题我之前也踩过坑,大概率是原始数据里的Month列中,"July"的拼写和你定义的month_levels里的版本不完全一致——这种细节真的太容易忽略了!

先给你捋捋可能的原因和对应的解决办法:

第一步:先排查原始数据的匹配问题

你先跑一行代码,看看原始数据里Month列的所有唯一值,就能一眼看出问题:

# 查看原始数据中Month列的全部唯一取值,重点看July相关的条目
unique(MyDf$Month)

你很可能会发现:原始数据里的"July"要么是小写的july、要么是缩写Jul、要么前面/后面多了空格(比如 July),甚至可能是带特殊字符的全角版本,这些都会导致和你定义的July不匹配,转成有序因子时直接变成NA。

第二步:针对性修正问题

根据你排查出的结果,选对应的方法处理:

  1. 大小写不一致:统一格式后再转因子
    用stringr包的str_to_title()把所有月份转成首字母大写的格式,确保和你的month_levels完全匹配:

    library(dplyr)
    library(stringr)
    
    month_levels = c('January', 'February', 'March', 'April', 'May', 'June', 'July',
                     'August', 'September', 'October', 'November', 'December')
    
    Df_Average_Month <- MyDf %>%
      # 先统一Month的大小写格式
      mutate(Month = str_to_title(Month)) %>%
      # 再转成指定顺序的有序因子
      mutate(Month = ordered(Month, levels = month_levels)) %>%
      group_by(Month) %>%
      # 别忘了加上计算均值的summarise步骤!
      summarise(Average_Daffodil_Bulbs = mean(Daffodil_Bulbs, na.rm = TRUE))
    
  2. 有多余空格:先去掉前后空格
    如果是Month值前后有看不见的空格,用str_trim()清理:

    Df_Average_Month <- MyDf %>%
      mutate(Month = str_trim(Month)) %>% # 去掉前后空格
      mutate(Month = ordered(Month, levels = month_levels)) %>%
      group_by(Month) %>%
      summarise(Average_Daffodil_Bulbs = mean(Daffodil_Bulbs, na.rm = TRUE))
    
  3. 是月份缩写:转成全名再匹配
    如果原始数据里是Jul这种缩写,用lubridate包的工具转成全名:

    library(dplyr)
    library(lubridate)
    
    month_levels = c('January', 'February', 'March', 'April', 'May', 'June', 'July',
                     'August', 'September', 'October', 'November', 'December')
    
    Df_Average_Month <- MyDf %>%
      # 把缩写转成完整的月份名称
      mutate(Month = month(parse_date_time(Month, "%b"), label = TRUE, abbr = FALSE)) %>%
      mutate(Month = ordered(Month, levels = month_levels)) %>%
      group_by(Month) %>%
      summarise(Average_Daffodil_Bulbs = mean(Daffodil_Bulbs, na.rm = TRUE))
    

最后提醒你

转成有序因子之前,一定要确保原始数据的每个Month值都能在month_levels里找到完全精确的匹配——差一个空格、一个大小写,都会被当成不匹配的取值,直接变成NA。另外你之前的代码里group_by之后的summarise部分没写完,可别忘了加上计算均值的步骤哦!

备注:内容来源于stack exchange,提问作者Alice Hobbs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 15:49:30