字符串包含“年度周”,我希望使用parse_date_time()将其转换为date对象,但无法使代码工作:
parse_date_time(c("201510"), "YW")我不用用润滑油,也可以是其他的包。
发布于 2017-08-09 10:08:46
在将年度周转换为日期之前,您必须指定一周中的某一天,但更重要的是,您必须确保使用的是哪一种不同的约定。
基R的strptime()函数知道一年中周的3种定义(但只支持其中的2种)和工作日数的2种定义,参见?strptime
一年中的每周
%U%W%V,它在输入时被接受,但被忽略。
请注意,还有一个基于周的年份(%G和%g),它将与%V一起使用,因为它可能与日历年(%Y和%y)不同。数字工作日
%u%w用不同的惯例来转换一年一周的日子。
如果我们将第一天附加到字符串中,并使用不同的格式,我们就会得到
as.Date("2015101", "%Y%U%u")
# [1] "2015-03-09"
as.Date("2015101", "%Y%U%w")
# [1] "2015-03-09"
as.Date("2015101", "%Y%W%u")
# [1] "2015-03-09"
as.Date("2015101", "%Y%W%w")
# [1] "2015-03-09"
as.Date("2015101", "%G%V%u")
# [1] NA对于工作日格式%u和%w,我们确实得到了相同的结果,因为在这两种约定中,第一天都是星期一(但是在处理星期日时要小心)。
对于2015年,美国和英国对年度周的定义是一致的,但并非所有年份都是如此,例如,2001、2007和2018年的情况并非如此:
as.Date("2018101", "%Y%U%u")
#[1] "2018-03-12"
as.Date("2018101", "%Y%W%u")
#[1] "2018-03-05"输入不支持ISO 8601格式说明符。因此,几年前我创建了 package:
ISOweek::ISOweek2date("2015-W10-1")
#[1] "2015-03-02"编辑:使用星期四将一周与一个月联系起来
如前所述,您需要指定一周中的一天才能获得完整的日历日期。如果日期需要按月后进行汇总,也需要这样做。
如果没有指定工作日,如果日期应该按月后进行汇总,则可以将每周的星期四作为参考日(a suggestion by djhurio之后)。这将确保将整个星期分配给一周的大部分时间所属的月份。
例如,以星期日作为参考日将返回。
ISOweek::ISOweek2date("2015-W09-7")1 "2015-03-01“
因此,将整个星期与3月联系在一起,尽管一周中只有一天属于3月,而其余6天属于2月。以星期四为参考日将返回二月的日期:
ISOweek::ISOweek2date("2015-W09-4")1 "2015-02-26“
发布于 2019-01-10 11:07:53
是的,ISOweek包是这样做的
ISOweek::ISOweek2date(isoWeek)但是对于另一个方向,也要检查更新的lubridate包
ISOweek::date2ISOweek(yourDate)
lubridate::isoweek(ymd(yourDate))https://stackoverflow.com/questions/45549449
复制相似问题