R 从年初的周数中获取一周第一天的日期

R 从年初的周数中获取一周第一天的日期,r,R,我知道我可以将一年一周的数字转换为具有以下内容的日期 week = "2018-23" as.Date(paste(week, "1", sep = "-"), '%Y-%W-%u') [1] "2018-06-04" 然而,如果我看的是年初,比如2014年1月1日,我会得到一个NA week = "2014-00" as.Date(paste(week, "1", sep = "-"), '%Y-%W-%u') [1] NA 我意识到这是因为这周没有“第一天”,因为2014年1月1日是星期

我知道我可以将一年一周的数字转换为具有以下内容的日期

week = "2018-23"
as.Date(paste(week, "1", sep = "-"), '%Y-%W-%u')
[1] "2018-06-04"
然而,如果我看的是年初,比如2014年1月1日,我会得到一个
NA

week = "2014-00"
as.Date(paste(week, "1", sep = "-"), '%Y-%W-%u')
[1] NA
我意识到这是因为这周没有“第一天”,因为2014年1月1日是星期三,所以我需要更改它的工作日数,但它仍然没有返回我想要的日期

as.Date(paste(week, "3", sep = "-"), '%Y-%W-%u')
[1] '2014-01-01'
我想得到整周的第一个日期,即返回'2013-12-30'。有什么方法可以做到这一点,因为我有多年的数据,这个实例出现,我想避免手动编辑


我想象着lubridate::floor_date的情况,但我并不总是知道日期应该是多少。

我无法复制你的
NA

当我在将week设置为0或1的情况下运行您的示例时,我得到以下结果:

as.Date("2014-00-1", "%Y-%W-%u")
[1] "2014-01-06"
as.Date("2014-01-1", "%Y-%W-%u")
[1] "2014-01-06"
这让我觉得第0周的解决方案是减去7:

as.Date("2014-00-1", "%Y-%W-%u") - 7
[1] "2013-12-30"
阅读
as.Date
的文档后,由于“特定于语言环境的转换”,您和我的这种行为可能会有所不同。在任何情况下,您都可以编写自己的函数来处理0周:

myfun <- function(year, week) {
    if (week == 0) { 
        as.Date(paste(year, "01", "1", sep="-"), "%Y-%W-%u") - 7
    } else { 
        as.Date(paste(year, week, "1", sep="-"), "%Y-%W-%u")
    }
}

myfun您认为这似乎是一个特定于语言环境的问题,这是正确的。谢谢