Использование which () в объекте POSIXct захватывает неправильные элементы - PullRequest
0 голосов
/ 30 августа 2018

У меня есть фрейм данных e, в котором есть столбец Дата. В исходном файле даты сохраняются как факторы. Поэтому я конвертирую их в строки символов. В этих строках они имеют формат День / Месяц / Год Час: Минута, например 27.05.2014 15:42. Затем я использую strptime для преобразования этих строк в объекты POSIXct.

e$Date = as.character(e$Date)
e$Date = strptime(e$Date, tz = "UTC",  format = "%d/%m/%Y %H:%M")

Все выглядит хорошо в выводе, потому что даты теперь в форме "2014-05-27 15:42:00 UTC". Тем не мение. Когда я использую which (), чтобы найти даты после «2016-02-14 00:51:00 UTC», я получаю неправильные даты!

 which(e$Date>"2016-02-14 00:51:00 UTC")

Команда возвращает список дат, которые начинаются с «2016-02-12 08:54:00 UTC», даже если после моей начальной точки есть несколько десятков дат, но до «2016-02-12 08:54: 00 UTC », которые не включены. Кажется, он сдвинут вперед на 8 или 9 часов.

Я знаю, что делаю что-то не так с часовыми поясами. Я увидел ответ на Подмножестве данных на основе даты и времени POSIXct, превышающих дату и время, используя dplyr , что, похоже, действительно близко к моей проблеме. Однако я указал часовой пояс в своей исходной команде strptime (я также пытался использовать as.POSIXct вместо strptime, и у меня возникла та же проблема).
Кто-нибудь может увидеть, что я делаю не так ???

1 Ответ

0 голосов
/ 30 августа 2018

Вы, вероятно, должны сохранить его как POSIXlt datetime (который создает strptime), а затем сравнить с другим объектом datetime в соответствующем часовом поясе. E.g.:

x <- strptime(c("2018-08-30 08:04", "2018-08-30 08:05", "2018-08-30 08:06", 
"2018-08-30 08:07", "2018-08-30 08:08"), format="%Y-%m-%d %H:%M", tz="UTC")
#[1] "2018-08-30 08:04:00 UTC" "2018-08-30 08:05:00 UTC"
#[3] "2018-08-30 08:06:00 UTC" "2018-08-30 08:07:00 UTC"
#[5] "2018-08-30 08:08:00 UTC"

Сравнение текста дает странные результаты:

x > "2018-08-30 08:06:00 UTC"
#TRUE TRUE TRUE TRUE TRUE

Сравнение даты и времени:

x > as.POSIXlt("2018-08-30 08:06:00", tz="UTC")
#[1] FALSE FALSE FALSE  TRUE  TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...