R语言如何根据季节起始月份向量生成循环的各季节月份序列
实现方案
核心逻辑
- 月份是1-12循环的,我们可以先把月份映射到1~24的连续区间,避免跨年度的复杂判断
- 补全结束边界:在输入的起始月份向量最后追加
第一个起始月份 + 12,解决最后一个季节的结束边界越界问题 - 每个季节的月份范围是「当前起始月」到「下一个起始月 - 1」,超过12的数值减12即可得到实际月份
完整可运行代码
generate_seasons <- function(m_vec) { n_season <- length(m_vec) # 补全边界:最后一个季节的下一个起始月为第一个月+12,处理跨年场景 m_vec_extend <- c(m_vec, m_vec[1] + 12) season_list <- list() for (i in seq_along(m_vec)) { start <- m_vec_extend[i] end <- m_vec_extend[i + 1] - 1 # 生成序列后转换为1-12的实际月份 season_month <- ifelse(start:end > 12, start:end - 12, start:end) season_list[[paste0("season", i)]] <- season_month } return(season_list) }
测试用例验证
测试1:初始示例
m_vec <- c(3,7,11) generate_seasons(m_vec)
输出结果和需求完全匹配:
$season1 [1] 3 4 5 6 $season2 [1] 7 8 9 10 $season3 [1] 11 12 1 2
测试2:三季分界示例
m_vec <- c(12, 5, 9) generate_seasons(m_vec)
输出结果:
$season1 [1] 12 1 2 3 4 $season2 [1] 5 6 7 8 $season3 [1] 9 10 11
内容的提问来源于stack exchange,提问作者89_Simple
相关产品推荐
相关产品推荐

