R не дает правильный номер недели - PullRequest
0 голосов
/ 09 мая 2019

Здравствуйте. Я пытаюсь найти номер недели для серии дат за три года.Однако R не дает правильный номер недели.Я генерирую последовательность дат с 2016-04-01 по 2019-03-30, а затем пытаюсь рассчитать неделю за три года, чтобы получить номер недели 54, 55, 56 и т. Д.

Однако, когда я проверяю неделю 2016-04-03 R показывает номер недели как 14, где, как при перекрестной проверке с Excel, это неделя с номером 15, а также он просто рассчитывает 7 дней и не ссылается на фактические календарные дни.Кроме того, номер недели начинается с 1 для каждого начала года

Код выглядит следующим образом

days <- seq(as.Date("2016-04-03"),as.Date("2019-03-30"),'days')
weekdays <- data.frame('days'=days, Month = month(days), week = week(days),nweek = rep(1,length(days)))

Вот так выглядят результаты

   days    week
2016-04-01  14
2016-04-02  14
2016-04-03  14
2016-04-04  14
2016-04-05  14
2016-04-06  14
2016-04-07  14
2016-04-08  15
2016-04-09  15
2016-04-10  15
2016-04-11  15
2016-04-12  15

Однако когдапроверено в excel вот что я получаю

   days    week
2016-04-01  14
2016-04-02  14
2016-04-03  15
2016-04-04  15
2016-04-05  15
2016-04-06  15
2016-04-07  15
2016-04-08  15
2016-04-09  15
2016-04-10  16
2016-04-11  16
2016-04-12  16

Может кто-нибудь, пожалуйста, помогите мне определить, где я иду не так.

Заранее большое спасибо !!

1 Ответ

8 голосов
/ 09 мая 2019

Не то, что вы делаете неправильно само по себе , есть только разница в том, как R (я предполагаю, что вы используете lubridate пакет) и Excel вычисляют номера недель.

  • R будет рассчитывать номера недель на основе семидневного блока с 1 января того года;но
  • Excel вычисляет номера недель на основе недели, начинающейся с воскресенья.

Для примера рассмотрим первые дни января 2016 года.В пятницу, 1 января 2016 года и R, и Excel сообщат, что это неделя 1.

В воскресенье, 3 января 2016 года:

  • это в течение первых семи днейначало года, поэтому R вернется на неделю номер 1;но
  • это воскресенье, поэтому Excel выберет неделю номер 2.

Попробуйте:

ifelse(test = weekdays.Date(days[1]) == "Sunday", yes = epiweek(days[1]), no = epiweek(days[1]) + 1) + cumsum(weekdays.Date(days) == "Sunday")

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

...