【问题标题】:How do I transform week (and year) to date of the first date (i.e. Monday) of the week in R?如何在 R 中将周(和年)转换为一周中第一个日期(即星期一)的日期?
【发布时间】:2022-01-27 10:17:35
【问题描述】:

在 R 中,我有一个包含周数和年份的数据集(见下文),我想将其转换为一周中对应的星期一的日期。我使用了 as.Date() 函数。这很好用,除了第一周,函数返回 NA 因为第一周的相应星期一属于上一年。因此,我希望该函数返回星期一的日期,即使它不是同一年。有什么想法吗?

data.frame(week = paste(2022,0:5,sep="-")) %>%
mutate(week2 = paste(week,"1",sep="-"),
        date=as.Date(week2, "%Y-%W-%w"))
week    week2       date
1 2022-0 2022-0-1       <NA>
2 2022-1 2022-1-1 2022-01-03
3 2022-2 2022-2-1 2022-01-10
4 2022-3 2022-3-1 2022-01-17
5 2022-4 2022-4-1 2022-01-24
6 2022-5 2022-5-1 2022-01-31

【问题讨论】:

标签: r date


【解决方案1】:

你的代码很好。但是您只有一个问题:如果周 == 0,则不适用。如果周数为零,则一年中的第一天不是星期一。因此,您可以检查周数是否为零(并查找前一年的星期一)或按照您的示例进行操作。例如as.Date("2018-1-1", "%Y-%W-%w") == 2018-01-01(周 == 1,而不是 0)。

foo <- function(year, week) {
    if (week == 0) {
        year <- year - 1
        week <- data.table::week(as.Date(paste0(year, "-12-31"))) - 1
    }
    return(as.Date(paste0(c(year, week, "1"), collapse = "-"), "%Y-%W-%w"))
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多