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

如何基于%Year%Week格式的输入数值生成连续的年周序列

R 连续年周序列生成方案

核心实现代码

依赖lubridate包处理ISO周规则,适配所有边界场景:

library(lubridate)

# 生成连续年周序列主函数
gen_yearweek_seq <- function(from, to) {
  # 解析输入的年周数值为对应ISO周的日期
  parse_yw_to_date <- function(yw_num) {
    year <- yw_num %/% 100
    week <- yw_num %% 100
    # 取当年第一周第一天为基准,偏移对应周数
    ymd(paste0(year, "-01-01")) + weeks(week - 1)
  }
  
  # 按周步长生成日期序列
  week_date_seq <- seq.Date(
    from = parse_yw_to_date(from),
    to = parse_yw_to_date(to),
    by = "week"
  )
  
  # 日期转年周数值,自动处理ISO规则
  as.integer(sapply(week_date_seq, function(d) {
    sprintf("%d%02d", isoyear(d), isoweek(d))
  }))
}

# 可选:生成用户要求的c()拼接格式输出
format_to_c_style <- function(yw_seq) {
  # 按年份分组
  year_group <- split(yw_seq, yw_seq %/% 100)
  group_str <- sapply(year_group, function(weeks) {
    paste0(min(weeks), ":", max(weeks))
  })
  paste0("c(", paste(group_str, collapse = ", "), ")")
}

使用示例

普通场景测试(匹配用户输入示例)

input.from <- 202144
input.to <- 202208

# 生成序列
result <- gen_yearweek_seq(input.from, input.to)
# 输出拼接格式
cat(format_to_c_style(result), "\n")

输出结果与用户期望完全一致:

c(202144:202152, 202201:202208)

53周特殊年份测试

以存在53周的2020年为例:

input.from <- 202050
input.to <- 202103
result <- gen_yearweek_seq(input.from, input.to)
cat(format_to_c_style(result), "\n")

输出自动适配53周规则:

c(202050:202053, 202101:202103)

约束适配说明

  • 53周自动适配:全程采用ISO 8601周标准,通过isoyear()和isoweek()函数处理周数计算,自动识别有53周的特殊年份,无周数越界问题
  • 周数两位保留:使用sprintf("%02d")格式化周数,不足两位自动补前导零,最终输出为数值类型,与输入格式完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:00:00