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

使用case_when转换月份至季度的R代码结果与教授不符问题排查

问题:月份转季度的统计结果与预期不符

我编写了一个用case_when将月份缩写转换为季度的函数,通过mutate生成新变量Qtr后统计各季度的观测数量,但结果和教授的统计值(161,071、85,588、100,227、142,651)不一致,我的结果是152174、165778、205615、174592,不确定代码是否存在问题。

我的R代码如下:

convert_to_qtr <- function(Month) {
  case_when(
    Month == "Jan" ~ "Q1",
    Month == "Feb" ~ "Q1",
    Month == "Mar" ~ "Q1",
    Month == "Apr" ~ "Q2", 
    Month == "May" ~ "Q2", 
    Month == "Jun" ~ "Q2",
    Month == "Jul" ~ "Q3", 
    Month == "Aug" ~ "Q3", 
    Month == "Sep" ~ "Q3",
    Month == "Oct" ~ "Q4", 
    Month == "Nov" ~ "Q4", 
    Month == "Dec" ~ "Q4"
  )
}

example_months <- c("Jan", "Mar", "May", "May", "Aug", "Nov", "Nov", "Dec")
convert_to_qtr(example_months)


df %>%
  mutate(Qtr = convert_to_qtr(Month)) %>%
  group_by(Qtr) %>%
  count(Qtr)

排查方向

  • 检查原始数据的月份格式:case_when的匹配是严格的,若df$Month存在大小写不一致(如jan/JAN)、拼写错误(如Sept而非Sep)、空值/NA,这些观测无法被匹配到对应季度,会导致统计结果偏差。可以用unique(df$Month)查看所有月份取值,确认是否有不在函数匹配列表中的内容。
  • 验证函数逻辑:用example_months测试,函数返回["Q1", "Q1", "Q2", "Q2", "Q3", "Q4", "Q4", "Q4"],逻辑本身是正确的,问题大概率出在原始数据上。
  • 简化统计逻辑:group_by(Qtr)后count(Qtr)可以简化为直接count(Qtr)(count会自动按目标列分组),避免残留分组导致的统计错误。
  • 更健壮的转换方式:可以用lubridate包的工具实现更通用的月份转季度,减少手动匹配的误差:
    library(lubridate)
    df %>%
      mutate(Qtr = paste0("Q", quarter(parse_date_time(Month, "abbrev")))) %>%
      count(Qtr)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:39:53