2015-09-09 118 views
9

我在R中有一個數據框,並將其轉換爲日期。我知道我要挑了一年的一週,所以我在2014年和1。這個轉換爲日期固定的值的天似乎很簡單:將週數轉換爲日期

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

但如果一週是大於這個代碼只能9.第1周 - 9日返回NA。如果我將該周更改爲01,02,03 ...它仍然會返回NA。

任何人都可以看到我缺少的東西嗎?

+0

的可能的複製[變換年/周向中的R日期對象(https://stackoverflow.com/questions/45549449/transform-year-week-to-date-object-in-r) – Uwe

+0

當心關於如何計算每年每週的不同公約。請參閱[此答案](https://stackoverflow.com/a/45587644/3817004)進行討論。 – Uwe

回答

11

as.Date將1至9調用爲NA,因爲它需要兩位數字作爲週數,並且無法正確解析它。

爲了解決這個問題,加入一些 - 的東西分裂:

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

r在數字數據中刪除01中的'0' - 查看paste(2014,01,1,sep =「」)' - 「201411」的輸出。你可以粘貼(2014,「01」,1,sep =「」)'來製作它的字符,但是如果你的數據是數字的,那麼它就不容易工作。 – jeremycg

+2

請注意關於如何計算每年一次的不同約定。請參閱[此答案](https://stackoverflow.com/a/45587644/3817004)進行討論。 – Uwe

2

另一種解決方案是使用日期計算從lubridate包:

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

-1是必要的,因爲2014-01-01是已經在第1周。換句話說,我們想要

  • df$Week == 1映射到2014-01-01(這是ymd("2014-01-01") + weeks(1-1)
  • df$Week == 2映射到2014-01-08(這是ymd("2014-01-01") + weeks(2-1)
  • 等。
+0

你如何概括這個以考慮到年份的變化? – Phil

+0

請注意關於如何計算每年一次的不同約定。請參閱[此答案](https://stackoverflow.com/a/45587644/3817004)進行討論。 – Uwe