【发布时间】:2015-02-16 14:07:08
【问题描述】:
我写这篇文章是因为我找不到其他已回答问题的线程。
在 R 中创建“y/w”格式(y 是 2 位数的年份,w 是 2 位数的周数)的最佳代码是什么?
到目前为止,这是我正在使用的:
require(lubridate)
paste(substr(year(Sys.Date()),3,4),sprintf("%02d", isoweek(Sys.Date())), sep="/")
当然,这可能会在一年的最后几天或第一天失败;例如,它可以给出 2016 年 1 月 1 日的“16/53”结果(而应该是“16/01”)。
我正在考虑一些基于 Sys.Date 高于或低于 1 月 1 日的 if-else 构造,并将其与 wday 函数相结合,但我确信必须有一个更优雅和简洁的解决方案。
你有什么线索吗?
谢谢,
MZ
【问题讨论】:
-
format(Sys.Date(), "%Y-%U")呢? -
几乎很可爱。改成
format(Sys.Date(), "%y/%U",但显示今天还是w7,而应该是w8……这就是为什么我在lubricate包中使用isoweek而不是week的原因。 -
我明白了。然而,嗯,
isoweek(as.Date("2016-01-01"))是53,而不是1。那是你要的吗?因为在这种情况下,我只需修改isoweek函数以返回年份。 -
我想要
15/53,因为这是 2015 年的第 53 周。如果您尝试使用isoweek(as.Date(2015-01-01)),您会发现在这种情况下它是第 1 周,所以我可以正常工作(就像它一样在 2015 年 12 月 31 日之前工作正常)。