代码之家  ›  专栏  ›  技术社区  ›  cdeterman

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

r
  •  2
  • cdeterman  · 技术社区  · 8 年前

    我知道我可以用下面的方法把一个年周数转换成一个日期

    week = "2018-23"
    as.Date(paste(week, "1", sep = "-"), '%Y-%W-%u')
    [1] "2018-06-04"
    

    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 回复  |  直到 8 年前
        1
  •  2
  •   DanY    8 年前

    我无法复制你的 NA .

    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")
        }
    }