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

R tidyverse中case_when函数问题排查:生成season仅2层级而非预期4个

case_when仅返回2类的问题原因与修复方案

核心错误原因

你误用了逻辑运算符,将区间判断需要的逻辑与(&)写为了逻辑或(|),同时对case_when的判断顺序规则理解不到位。

case_when运行规则

case_when会按照你写的条件顺序从上到下逐一匹配,只要某行数据满足了靠前的某条条件,就会直接使用该条件对应的赋值,不再校验后续所有条件。

你的代码问题拆解

  • 第一条条件day <= 60 | day > 335可以正确匹配到全年两端的冬季区间,这部分数据会被正确赋值为winter。
  • 剩余所有数据的day值范围是61~335,到第二条条件day > 60 | day <= 151时,由于逻辑或只要一边成立整体就成立,所有61~335的day都满足day>60,因此全部命中第二条条件被赋值为spring,后面的summer、autumn条件永远不会被触发,所以最终只能得到2个分类。

修复后的代码

把后三个区间判断的逻辑运算符从|替换为&即可,冬季的两个不连续区间用|是正确的:

data <- tibble(day = 1:366) %>% 
  mutate(
    season = case_when(
      day <= 60 | day > 335 ~ "winter",
      day > 60  & day <= 151 ~ "spring",
      day > 151 & day <= 242 ~ "summer",
      day > 242 & day <= 335 ~ "autumn"
    )
  )

运行table(data$season)即可看到4个分类的统计结果,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:45:04