【问题标题】:Year_CW into Date in R [duplicate]Year_CW 到 R 中的日期 [重复]
【发布时间】:2021-05-10 05:09:11
【问题描述】:

我的数据集中有一个带有日历周 (CW) 的年份,需要将其转换为日期。 不幸的是,我没有在 lubridate 包中找到正确的功能。 将日期转换为 CW 很容易,但反之则不然。

我还尝试了以下方法:

as.Date(x="2019_2", format="%Y_%U")
[1] "2019-02-05"
as.Date(x="2019_2", format="%Y_%W")
[1] "2019-02-05"

知道如何处理吗?

提前致谢!

【问题讨论】:

  • 这很奇怪。 "%V" 说(在?strptime 中)它是“接受但在输入时忽略”,而其他基于两周的%-codes 没有这样说......但它们是都是不正确的。我想知道这是否是文档错误。
  • 我认为@borderline_coder 的答案有要点:在标准中粘贴1(星期一)或您希望每周开始的哪一天,并将%u 添加到格式中。还是很奇怪。

标签: r date format


【解决方案1】:

试试这个: as.Date(paste(2019, 2, 1, sep="-"), "%Y-%U-%u")

> as.Date(paste(2019, 2, 1, sep="-"), "%Y-%U-%u")
[1] "2019-01-14"

如果要引用x,也可以使用:

x = "2019_2"

> as.Date(paste((substring(x, 1, 4)), (sub(".*_(.*)", "\\1\\", x)), 1, sep="-"), "%Y-%U-%u")
[1] "2019-01-14"

【讨论】:

  • 你正在做一些事情,但我认为你可以简化它。 as.Date(paste("2019_2", 1), "%Y_%U %u")。我的操作假设是字符串没有分解成单独的组件和你的第一个代码块,不需要分解。
  • 剩下的唯一事情是 OP 是否打算将日历周设为星期一(美国)或星期日(英国)或“新年中天数最多的一周”(ISO )。
【解决方案2】:

使用lubridate::weeks() 获取您所在周的开始日期。

week <- "2019_2"
date <- lubridate::ymd("2019-01-01") + lubridate::weeks(as.numeric(stringr::str_extract(week, pattern = "\\d$")) - 1)
date
    [1] "2019-01-08"

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    相关资源
    最近更新 更多