дата потолка в R - PullRequest
       20

дата потолка в R

1 голос
/ 08 мая 2020

Я использовал потолок_date, когда увидел, что его поведение несовместимо с floor_date. Например,

> floor_date(as.Date("05/10/2020","%m/%d/%Y"),unit="week",week_start=7)
[1] "2020-05-10"
> ceiling_date(as.Date("05/10/2020","%m/%d/%Y"),unit="week",week_start=7)
[1] "2020-05-17"

Но floor(5)=ceiling(5)=5 в R.

Нужно установить change_on_boundary = False в функции потолка_дате, чтобы она вела себя как floor_date, но я думаю, что это должно быть поведение по умолчанию. Я прочитал о причинах того, что потолок_date ведет себя так, как описано выше, и для меня это не имело смысла. Фактически, было время, когда то, что я считаю поведением по умолчанию, действительно было поведением по умолчанию. См. Мои комментарии, выделенные курсивом ниже, в отношении документации.

change_on_boundary Если NULL (по умолчанию) не изменять моменты на границе (потолочная_дата (ymd_hms ('2000-01-01 00:00:00')) составляет 2000-01-01 00:00: 00), но округлить объекты Date до следующей границы (потолочная_дата (ymd ("2000-01-01"), "month") равна "2000-02-01"). Когда TRUE, моменты на границе округляются до следующей границы. Когда FALSE, дата-время на границе никогда не округляется (это было по умолчанию для lubridate до версии v1.6.0. Подробнее см. В разделе «Округление объектов даты» ниже). <- <em>Итак, было время, когда я указанное должно быть поведение по умолчанию было поведением по умолчанию.

По умолчанию округление объектов Date выполняется в 3 шага:

Преобразование в момент времени, представляющий нижнюю границу даты: 2000-01-01 -> 2000-01-01 00: 00: 00

Округлить до ближайшей границы единицы округления. Например, если единицей округления является месяц, то следующей ближайшей границей 2000-01-01 будет 2000- 02-01 00: 00: 00.

Причина в том, что «частичный» 2000-01-01 концептуально является интервалом (2000-01-01 00:00:00 - 2000-01- 02 00:00:00), а день еще не начал отсчет времени на точной границе 00:00:00. Таким образом, округление дня до его нижней границы кажется неправильным.

<- <em>Я не слежу за чем ", и день еще не начал отсчитывать точную границу 00:00:00 "означает, и как и почему" 2000-01-01 концептуально является интервалом (2000-01-01 00:00:00 - 2000-01-02 00:00:00) "имеет значение. Даже если 5/10/2020 рассматривается как целый день, его максимальная дата для unit = week и week_start = 7 все равно должна быть 5/10/2020, потому что потолочная_дата (as.Date ("05/10/2020", " % m /% d /% Y "), unit = week и week_start = 7) должны возвращать самое раннее воскресенье не ранее 5/10/2020. И этот день явно 5.10.2020. Это не 17.05.2020.

Может ли кто-нибудь взвесить это?

...