R - недельная функция возвращает неожиданные значения

Я ищу, чтобы найти неделю в году в R для списка дат. Однако результаты довольно странные.

См. ниже:

week("2000-01-01")
week("2000-01-06")
week("2000-01-07")
week("2000-01-13")
week("2000-01-14")

Это возвращает 1, 1, 2, 2, 3

Однако, если вы посмотрите на календарь: http://calendars.generalblue.com/content/images/calendars/2000/01-January-2000-Calendar.png

Вы ожидаете, что это будет 1, 2, 2, 3, 3.

Почему-то это переносится на четверг. Разве это не странно?

Кто-нибудь знает, как мне это сделать, чтобы получить ожидаемые результаты 1, 2, 2, 3, 3?


person Trexion Kameha    schedule 25.11.2014    source источник


Ответы (1)


Взгляните на ?week

Недели - это количество полных семидневных периодов между датой и 1 января плюс один. isoweek возвращает неделю в том виде, в котором она отображается в системе ISO 8601, в которой используется повторяющаяся високосная неделя.

Используя функцию isoweek, вы получите следующий результат.

require(lubridate)
dates <- c("2000-01-01","2000-01-06","2000-01-07","2000-01-13","2000-01-14") 
sapply(dates, isoweek) 
2000-01-01 2000-01-06 2000-01-07 2000-01-13 2000-01-14 
        52          1          1          2          2

Так когда же для вас «начинается» неделя? В следующей функции даты начало недели в воскресенье

require(lubridate)
my_week <- function(x){
  # fst monday of the same year
  first_sun <- as.POSIXct(paste0(year(x),"-01-Mon"), format = "%Y-%U-%a")
  (yday(x) + (7 - yday(first_sun) + 1)) %/% 7
}

dates <- seq(as.Date("2000-01-01"), as.Date("2000-01-15"), by=1)
a <- sapply(dates, my_week)
names(a) <- dates

> a
2000-01-01 2000-01-02 2000-01-03 2000-01-04 2000-01-05 
         0          1          1          1          1          
2000-01-06 2000-01-07 2000-01-08 2000-01-09 2000-01-10 
         1          1          1          2          2    
2000-01-11 2000-01-12 2000-01-13 2000-01-14 2000-01-15 
         2          2          2          2          2 
person Rentrop    schedule 25.11.2014
comment
это ... действительно раздражает ... Спасибо! - person Trexion Kameha; 25.11.2014