Преобразовать год / неделю на текущий объект

String содержит «YEAR WEEK», и я хочу преобразовать его с помощью parse_date_time() в объект даты, но я не могу заставить код работать:

 parse_date_time(c("201510"), "YW") 

Мне не нужно использовать lubridate , могут быть и другие пакеты.

Прежде чем конвертировать год-неделю в дату, вы должны указать день недели, но что более важно, вы должны убедиться, что какая из разных конвенций используется.

strptime() base R strptime() знает 3 определения для недели года (но поддерживает только 2 из них на входе) и 2 определения для числа дней недели, см. ?strptime :

Неделя года

  • Конвенция США : неделя года в виде десятичного числа (00-53), использующая воскресенье в качестве первого дня 1 недели (и, как правило, с первым воскресеньем года как день 1 недели 1): %U

  • Британская конвенция : неделя года в виде десятичного числа (00-53) с понедельника в качестве первого дня недели (и обычно с первого понедельника года как день 1 недели 1): %W

  • Определение ISO 8601 : неделя года как десятичное число (01-53), как определено в ISO 8601. Если неделя (начиная с понедельника), содержащая 1 января, имеет четыре или более дней в новом году, то считается 1-й неделей. В противном случае это последняя неделя предыдущего года, а на следующей неделе – неделя 1: %V которая принимается, но игнорируется при вводе.
    Обратите внимание, что существует также недельный год ( %G и %g ), который должен использоваться с %V как он может отличаться от календарного года ( %Y и %y ).

Число дней в неделю

  • День недели как десятичное число (1-7, понедельник – 1): %u
  • День недели как десятичное число (0-6, воскресенье равно 0): %w
  • Интересно, что нет формата для случая, когда воскресенье считается как день 1 недели.

Преобразование года в неделю с различными соглашениями

Если мы добавим 1-й день в строку и используем разные форматы, которые мы получаем

 as.Date("2015101", "%Y%U%u") # [1] "2015-03-09" as.Date("2015101", "%Y%U%w") # [1] "2015-03-09" as.Date("2015101", "%Y%W%u") # [1] "2015-03-09" as.Date("2015101", "%Y%W%w") # [1] "2015-03-09" as.Date("2015101", "%G%V%u") # [1] NA 

Для форматов дней недели %u и %w мы получаем тот же результат, потому что 1-й день – понедельник в обеих соглашениях (но следите за тем, чтобы иметь дело с воскресеньями).

В 2015 году определение США и Великобритании в течение недели года совпадает, но это неверно на протяжении всех лет, например, не на 2001, 2007 и 2018 годы:

 as.Date("2018101", "%Y%U%u") #[1] "2018-03-12" as.Date("2018101", "%Y%W%u") #[1] "2018-03-05" 

Спецификаторы формата ISO 8601 не поддерживаются на входе. Поэтому я создал пакет ISOweek несколько лет назад:

 ISOweek::ISOweek2date("2015-W10-1") #[1] "2015-03-02" 

Изменить: использовать четверг, чтобы связать неделю с месяцем

Как указано выше, вам нужно указать день недели, чтобы получить полную календарную дату. Это также необходимо, если даты должны быть агрегированы к месяцу позже.

Если день недели не указан, и если даты должны быть агрегированы по месяцам позже, вы можете взять четверг каждую неделю в качестве контрольного дня (после предложения djhurio ). Это гарантирует, что целая неделя будет назначена на месяц, к которому принадлежит большинство дней недели.

Например, возrotation воскресенья в качестве ссылочного дня

 ISOweek::ISOweek2date("2015-W09-7") 
 [1] "2015-03-01" 

который, следовательно, свяжет всю неделю с мартом, хотя только один день недели относится к марту, а остальные 6 дней относятся к февралю. В четверг в качестве контрольного дня будет возвращена дата в феврале:

 ISOweek::ISOweek2date("2015-W09-4") 
 [1] "2015-02-26" 
  • Как извлечь один столбец из data.frame в качестве data.frame?
  • Добавить легенду в строку графика ggplot2
  • Загрузить пакет R из символьной строки
  • Как сохранить Листовку в карте R в виде файла png или jpg?
  • Как изменить порядок столбцов data.table (без копирования)
  • Как удалить столбцы по имени в кадре данных
  • Каков наилучший способ использования R-скриптов в командной строке (терминале)?
  • Изменение шрифтов в ggplot2
  • Включите пространство для отсутствия уровня фактора, используемого для эстетики заливки в geom_boxplot
  • Как выбрать первую и последнюю строку в переменной группировки в фрейме данных?
  • Упрощенная пирамида наseleniumия в ggplot2
  • Interesting Posts

    java.lang.IllegalArgumentException: просмотр не привязан к менеджеру окон

    Как вернуть логическое значение из AsyncTask?

    Как фильтровать строку для нежелательных символов с помощью регулярного выражения?

    Когда нужно поймать java.lang.Error?

    Перегрузка функций по типу возврата?

    значения matplotlib под курсором

    Вызов метода дочерних компонентов от родителя в реакции

    Что такое q = 0,5 в заголовках Accept * HTTP?

    Моя материнская плата имеет 24-контактный разъем питания, но мой блок питания имеет только 20-контактный разъем. Будет ли он работать без адаптера?

    Программно запустить OSGi (равноденствие)?

    Могу ли я использовать скрипт bash в качестве службы в OS X без необходимости устанавливать его автозагрузчиком?

    оператор присваивания ‘=’ атомный?

    Когда я должен развернуть свои сборки в GAC?

    IE 8: исправление фонового размера

    Не удается запустить видео. Попробуйте закрыть другие программы, которые могут использовать вашу веб-камеру

    Давайте будем гением компьютера.