Convert week number to date

ぐ巨炮叔叔 提交于 2019-12-17 10:50:09

问题


I have a data frame in R with the week of the year that I would like to convert to a date. I know I have to pick a year and a day of the week so I am fixing those values at 2014 and 1. Converting this to a date seems simple:

as.Date(paste(2014,df$Week,1,sep=""),"%Y%U%u")

But this code only works if week is greater than 9. Week 1 - 9 returns NA. If I change the week to 01,02,03... it still returns NA.

Anyone see what I am missing?


回答1:


as.Date is calling the 1 to 9 as NA as it is expects two digits for the week number and can't properly parse it.

To fix it, add in some - to split things up:

as.Date(paste(2014, df$Week, 1, sep="-"), "%Y-%U-%u")



回答2:


An alternative solution is to use date arithmetic from the lubridate package:

lubridate::ymd( "2014-01-01" ) + lubridate::weeks( df$Week - 1 )

The -1 is necessary because 2014-01-01 is already week 1. In other words, we want:

  • df$Week == 1 to map to 2014-01-01 (which is ymd("2014-01-01") + weeks(1-1))
  • df$Week == 2 to map to 2014-01-08 (which is ymd("2014-01-01") + weeks(2-1))
  • and so on.



回答3:


It will be like using 2nd year = (week-52), 3rd year  = (week -104)...so on

for(i in 1:456548)
{
  if (train[i,2] > 0 & train[i,2] <53)
  {
    train["weekdate"] <- as.Date(paste(2016, train$week, 1, sep="-"), "%Y-%U-%u")
  }
  if (train[i,2] > 52 & train[i,2] <105)
  {
    train["weekdate"] <- as.Date(paste(2017, (train$week-52), 1, sep="-"), "%Y-%U-%u")
  }
  if (train[i,2] > 104 & train[i,2] <150)
  {
    train["weekdate"] <- as.Date(paste(2018, (train$week-104), 1, sep="-"), "%Y-%U-%u")
  }

}


来源:https://stackoverflow.com/questions/32470414/convert-week-number-to-date

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!