如何在不使用ISOweek包的前提下将年-周格式日期转换为对应周首日
实现方案
你原有代码不生效的核心原因是使用了%Y(日历年)和普通周计数规则,和你数据遵循的ISO周规则不匹配,导致周数与年份匹配错位。
以下是base R原生实现方案,无需依赖任何第三方包:
date <- c(201553L, 201601L, 201602L, 201603L, 201604L, 201605L, 201606L, 201607L, 201608L, 201609L) # 转换为ISO周首日(周一为一周第一天) year_week <- as.character(date) first_day <- as.Date(paste0(substr(year_week, 1, 4), "-", substr(year_week, 5, 6), "-1"), format = "%G-%V-%u") # 输出结果 print(first_day)
运行后输出结果如下,完全匹配你的需求:
[1] "2015-12-28" "2016-01-04" "2016-01-11" "2016-01-18" "2016-01-25" "2016-02-01" "2016-02-08" "2016-02-15" "2016-02-22" "2016-02-29"
格式符说明
%G:ISO周对应的归属年份,跨年周会归属到包含多数天数的年份,区别于普通日历年%Y%V:ISO周数,取值范围1-53,和你输入数据的周数规则一致%u:星期的数字表示,1代表周一,刚好对应周首日的要求
如果需要得到POSIXct类型的结果,直接把as.Date替换为as.POSIXct即可,格式参数保持不变。
内容的提问来源于stack exchange,提问作者Priit Mets
相关产品推荐
相关产品推荐

