r - POSIX 日期从每周时间格式的日期

标签 r date posix

我将日期编码为每周时间格式(欧洲公约 >> 0152/53,例如 "2016 -48") 并希望将它们标准化为 POSIX 日期:

require(magrittr)
(x <- as.POSIXct("2016-12-01") %>% format("%Y-%V"))
# [1] "2016-48"
as.POSIXct(x, format = "%Y-%V")
# [1] "2016-01-11 CET"

我希望最后一条语句再次返回 "2016-12-01"。我在这里缺少什么?


编辑

感谢 Dirk,我能够将它拼凑起来:

y <- sprintf("%s-1", x)

虽然我还是不明白为什么这不起作用

(as.POSIXct(y, format = "%Y-%V-%u"))
# [1] "2016-01-11 CET"

这是

(as.POSIXct(y, format = "%Y-%U-%u")
# [1] "2016-11-28 CET"

编辑2

天哪,我认为使用 %V 通常是一个非常的坏主意:

as.POSIXct("2016-01-01") %>% format("%Y-%V")
# [1] "2016-53"

这是否应该被视为处于需要采取进一步行动的“严重错误”级别?!

坚持 %U%W 似乎是正确的方法

as.POSIXct("2016-01-01") %>% format("%Y-%U")
# [1] "2016-00"

编辑3

不,还没有完全完成/仍然感到困惑:该方法在第一周不起作用

(x <- as.POSIXct("2016-01-01") %>% format("%Y-%W"))
# [1] "2016-00"

as.POSIXct(sprintf("%s-1", x), format = "%Y-%W-%u")
# [1] NA

当使用 %U%W 时,它会按照基本约定中定义的 01 周执行(所以“第 2 周”,实际上)

as.POSIXct("2016-01-1", format = "%Y-%W-%u")
# [1] "2016-01-04 CET"

最佳答案

由于我必须处理很多 ISO 周的报告,所以我创建了 ISOweek package几年前。

该包包含函数 ISOweek2date(),它返回给定星期日期(根据 ISO 8601 的年、一年中的星期、星期几)的日期。它是 date2ISOweek() 的反函数。

使用 ISOweek,您的示例将变为:

library(ISOweek)

# define dates to convert
dates <- as.Date(c("2016-12-01", "2016-01-01"))

# convert to full ISO 8601 week-based date yyyy-Www-d
(week_dates <- date2ISOweek(dates))
[1] "2016-W48-4" "2015-W53-5"
# convert back to class Date 
ISOweek2date(week_dates)
[1] "2016-12-01" "2016-01-01"

请注意,date2ISOweek() 需要完整的 ISO week-based date采用 yyyy-Www-d 格式,包括星期几(1 到 7,周一到周日)。

因此,如果您只有年份和 ISO 周数,则必须创建一个指定星期几的字符串。

许多报告中的典型短语是,例如,“报告第 31 周结束 2017-08-06”:h

yr <- 2017
wk <- 31
ISOweek2date(sprintf("%4i-W%02i-%1i", yr, wk, 7))
 [1] "2017-08-06"

附录

请参阅 this answer有关 ISOweek 包的另一个用例和更多背景信息。

关于r - POSIX 日期从每周时间格式的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41597604/

相关文章:

r - 没有使用 RMySQL 选择数据库

java - 在验证日期方面需要帮助

c - POSIX 保证写入磁盘

c++ - pthread_join - 多个线程等待

r - 在 ggplot 和分割(分支)线中堆叠两个水平的因子

r - ggplot2:如何强制地 block 太少的方面数量?

python - python是否有等同于R语言中的符号对象?

android - 1个月限制申请免费使用

sql - 更改表中数据的日期和时间戳格式

macos - 在 Mac OS X 上打开磁盘设备文件以进行写访问