У меня есть данные на неделю в форме yyyy-ww
где ww
- номер недели в две цифры. Диапазон данных 2007-01
- 2010-30
. Соглашение о подсчете недель - это ISO 8601, который, как вы можете видеть здесь, on Wikipedia's "Week number" article, иногда достигает 53 недель в году. Например, для этой системы в 2009 году было 53 недели, см. Номера недель в this ISO 8601 calendar. (Другие годы, согласно статье Википедии, 53-й недели довольно редко.)53-я неделя года в R?
В основном я хочу прочитать дату недели в, преобразовать его в Date
объект и сохранить это в отдельной колонке в data.frame
. В качестве теста я преобразовал объекты Date
в формат yyyy-ww
по format([Date-object], format = "%Y-%W"
, и это заставило ошибку на 2009-53
. Эта неделя не может быть интерпретирована как дата на R
. Это очень странно, так как другие годы, которые не имеют 53-я неделя (в стандарте ISO 8601), преобразуются штрафом, например 2007-53
, тогда как другие годы, которые также не имеют 53-й недели (в стандарте ISO 8601), также терпят неудачу , такие как 2008-53
Следующий минимальный пример демонстрирует проблему.
Минимальный пример:
dates <- c("2009-50", "2009-51", "2009-52", "2009-53", "2010-01", "2010-02")
as.Date(x = paste(dates, 1), format = "%Y-%W %w")
# [1] "2009-12-14" "2009-12-21" "2009-12-28" NA "2010-01-04"
# [6] "2010-01-11"
other.dates <- c("2007-53", "2008-53", "2009-53", "2010-53")
as.Date(x = paste(other.dates, 1), format = "%Y-%W %w")
# [1] "2007-12-31" NA NA NA
Вопрос в том, как я могу получить R
принять номер недели в формате ISO 8601?
Примечание: Этот вопрос суммирует проблему, с которой я боролся в течение нескольких часов. Я искал и нашел различные полезные сообщения, такие как this, но никто не решил проблему.
Это могло бы быть более иллюстративными для сравнения 'as.Date (х = "2009-01 01", формат = "% Y-% W% W")' 'с ISOweek2date (" 2009-W01-1 ")', и вы также должны указать запись для '% W' в' help (strptime) '. – Roland
Не уверен, но я помню, что большая часть обработки даты R фактически обрабатывается системными библиотеками, что означает, что такая проблема (а) будет сильно отличаться от ОС к ОС; (б) может быть особенно изворотливым в Windows; (c) было бы трудно исправить в самом R (как видно из нижеприведенного ответа: «ISOweek» реализует свои собственные алгоритмы, поскольку в системных библиотеках Windows отсутствуют вещи) –
@BenBolker Поведение определяется в 'help (strptime)' , – Roland