не может получить подмножество даты из df на основе столбцов даты - PullRequest
0 голосов
/ 08 мая 2020

Я делаю отчет о фрейме данных, содержащем транзакции по парковке. Фрейм данных содержит две переменные POSIXct с именами start_time и end_time . Вот пример того, как они выглядят:

2019-11-25 10:35:00 UTC" "2019-11-28 18:21:00 UTC"

Я хочу получить подмножество моего фрейма данных от "2020-02-06" до "2020-03-23". Определенно есть транзакции, которые произошли в это время, но когда я использую следующий код, я получаю подмножество с нулевыми наблюдениями.

cutdate<- as.Date("2020-03-23",format ="%Y-%m-%d")
bdate<-as.Date("2020-06-02",format ="%Y-%m-%d")

dwdf%>% filter(as.Date(start_time) >= bdate & as.Date(end_time) < cutdate)->Bdf

Я пробовал другие функции, такие как подмножество и т. Д., Но получаю то же самое. Затем я попробовал что-то попроще и попытался проверить, создал ли я из переменной start_time простое логическое выражение, например

any(as.Date(dwdf$start_time) > bdate)

Если бы я получил какое-либо ИСТИНА, но все, что я получил, это ложь . Я не понимаю, почему это так, потому что если я это сделаю range(start_time), очевидно, что время начала будет позже, чем 6 февраля.

Я также рассматривал аналогичные вопросы по обмену стеками, и я не знаю почему я получаю разные результаты, поскольку выполняю то, что они сказали.

1 Ответ

0 голосов
/ 08 мая 2020

Я настоятельно рекомендую пакет lubridate для работы с данными времени.

library(lubridate)

x <- c("2019-11-25 10:35:00 UTC", "2019-11-28 18:21:00 UTC")

x_datetime <- ymd_hms(x)

x_datetime < ymd(20191126)
[1]  TRUE FALSE

Эти функции (ymd как «год-месяц-день» или ymd_hms как год- «месяц-день-час-минута-секунда»), чтобы упростить преобразование данных в форматы даты. И как только вы его получите, сравнения не так уж и сложны.

...