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

如何基于月份与年份列创建关联前一年的鱼类捕捞季节分箱列

解决跨年度季节分组的问题

这确实是处理时间序列分组时的典型需求——咱们需要把1-2月的「cold」季节关联到前一年,而不是当前年份。我来帮你调整代码,完美实现这个逻辑:

修改后的完整代码

# 生成示例数据(和你原来的一致)
fish <- data.frame(month = sample(1:12,36,replace=T), year = sample(c(2015,2016,2017),36,replace=T))
fish <- fish[order(fish$year,fish$month),]

library(dplyr)

# 1. 先按月份生成分季节标签
lev <- c(-Inf, 2, 6, 10, Inf)
lab <- c("cold", "warmer", "warm", "cold")
fish <- fish %>%
  mutate(season = cut(month, lev, labels = lab)) %>%
  # 2. 核心:调整年份——1-2月的cold组年份减1
  mutate(season_year = case_when(
    season == "cold" & month %in% 1:2 ~ year - 1,
    TRUE ~ year
  )) %>%
  # 可选:合并年份和季节为一个分组列,方便后续统计
  mutate(season_group = paste(season_year, season, sep = "_"))

代码解释

  • 季节标签生成:你原来的cut逻辑完全正确,把月份分成了「cold(11-2月)、warmer(3-6月)、warm(7-10月)」三组。
  • 年份调整:用case_when做条件判断:
    • 如果是cold季节且月份在1-2月,就把年份减1(比如2016年1月→2015年cold组)
    • 其他所有情况(包括11-12月的cold组)都保留原年份
  • 分组列优化:最后生成的season_group列(比如2015_cold、2016_warmer)可以直接用来做后续的分组统计,非常方便。

验证结果

你可以运行下面的代码查看1-2月的分组是否正确:

fish %>% filter(month %in% 1:2) %>% select(year, month, season, season_year, season_group)

比如你会看到类似这样的结果:

year month season season_year season_group
1 2016     1   cold        2015    2015_cold
2 2017     2   cold        2016    2016_cold

这样就完全实现了你要的「1-2月cold组关联前一年」的需求啦!

内容的提问来源于stack exchange,提问作者M.Teich

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:28:55