从年初开始的年周编号中获取星期几的日期

时间:2018-08-10 16:59:05

标签: 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日降到了星期三,所以该周没有“第一天”,因此我需要更改其工作的天数,但它仍不返回我的日期想要。

as.Date(paste(week, "3", sep = "-"), '%Y-%W-%u')
[1] '2014-01-01'

我想获取整周的第一个日期,即返回“ 2013-12-30”。我有什么办法可以完成此操作,因为我想避免手动编辑该实例的数据很多年。

我想像lubridate::floor_date有什么问题,但我并不总是知道星期几应该是什么。

1 个答案:

答案 0 :(得分:2)

我无法复制您的NA

当我将周设置为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")
    }
}