2015-09-09 2 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

Возможный дубликат [Transform Год/Неделя до даты объекта в 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 выдает «0» в 01 в числовых данных - см. Вывод «paste» (2014,01,1, sep = «») '-« 201411 ». Вы можете сделать 'paste (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