Как получить разницу в недельных единицах между двумя днями (даже если они близки, но относятся к разным неделям)

Привожу пример, чтобы было понятно:

если мы говорим о 2006/2007 годах, то последний день 2006 года был воскресенье, а первый день 2007 года был понедельник. Согласно Италии (но и другим странам), они относятся к разным неделям.

Как я могу получить эту информацию в R?

If I do:

difftime(as.Date("2007-01-01"),as.Date("2006-12-31"),units="weeks")

Я получаю: 0,1428571 ... но я хотел бы знать, как получить 1 (поскольку они отличаются на 1 неделю)


person Davide Passaretti    schedule 28.11.2013    source источник
comment
+1 за публикацию вашего первого вопроса с (действительно) минимальным воспроизводимым примером и тем, что вы пробовали! Добро пожаловать в СО. Ваше здоровье.   -  person Henrik    schedule 28.11.2013


Ответы (3)


Ваша проблема в том, что понедельник должен быть первым днем ​​недели. Пакеты R обычно считают воскресенье первым днем ​​недели.

Мое решение использует пакет lubridate и уменьшает день недели на единицу. С этим понедельники становятся воскресеньями, первым днем ​​недели для lubridate. Затем я использую floor_date для получения первого дня недели и difftime результата.

library(lubridate)
dates <-c(as.Date("2007-01-01"),as.Date("2006-12-31"))
weekdays(dates)
#[1] "Monday" "Sunday"
tempdates <-update(dates,wdays=wday(dates)-1)
weekdays(tempdates)
#[1] "Sunday"   "Saturday"
floor1 <-floor_date(tempdates, "week")
difftime(floor1[1],floor1[2], units = "weeks")
#Time difference of 1 weeks

С этим решением 1 и 2 января приходятся на одну неделю.

dates <-c(as.Date("2007-01-02"),as.Date("2007-01-01"))
tempdates <-update(dates,wdays=wday(dates)-1)
floor1 <-floor_date(tempdates, "week")
difftime(floor1[1],floor1[2], units = "weeks")
#Time difference of 0 weeks
person Pierre Lapointe    schedule 28.11.2013
comment
Спасибо за ваши комментарии к моему небрежному ответу. И за решение! +1! - person Henrik; 28.11.2013

Вы можете начать с strftime(as.Date("2007-01-01"),"%U"), который идентифицирует номер недели в году (ищите strftime) и, возможно, добавить специальный регистр для последней недели года.

person TheComeOnMan    schedule 28.11.2013

Разница в «неделях» зависит от того, используете ли вы «неделю» как 7 дней или как порядковый номер. Это дает вам метод R для работы со вторым определением «неделя»:

 diff( c(as.numeric(format( as.Date("2007-01-01"), "%W")), 
        as.numeric(format(as.Date("2006-12-31"), "%W")) ))
 [1] 51
person IRTFM    schedule 28.11.2013