В пакете R lubridate функция часа возвращает неправильный час

У меня есть объект времени POSIXct, из которого я хочу извлечь час. Однако возвращается неправильный час. Мой вывод выглядит следующим образом.

> t
[1] "2018-04-09 09:05:25 CEST"
> class(t)
[1] "POSIXct"
> hour(t)
[1] 7

Кто знает как это исправить? Заранее спасибо!

Джорди


person Jordi    schedule 28.06.2019    source источник
comment
Не воспроизводимо для меня... lubridate::hour(as.POSIXct("2018-04-09 09:05:25 CEST")) возвращает 9.   -  person Mako212    schedule 28.06.2019
comment
возможно, определены два разных системных времени/часовых пояса? Один в R и один в операционной системе, и R где-то конвертируется?   -  person dbo    schedule 28.06.2019
comment
Я тоже не могу это воспроизвести. Может быть, добавить, как вы сделали объект времени POSIXct?   -  person yfa    schedule 28.06.2019
comment
Возможно ли, что помимо lubridate загружается другой пакет с функцией hour?   -  person Jon Spring    schedule 29.06.2019


Ответы (2)


Я нахожу ymd() и ymd_hms() lubridate (и другие комбинации, такие как ydm()) очень удобными:

library(lubridate)
t <- ymd_hms("2018-04-09 09:05:25 CEST")
hour(t) 
# [1] 9
person dbo    schedule 28.06.2019

Спасибо всем за помощь.

Я нашел решение, предложенное этим ответом на StackOverflow.

Как и вы, я не смог воспроизвести ответ в изолированной среде. Однако, поскольку мое значение «t» исходило из DataFrame, неявное приведение типов, похоже, привело к тому, что значение было сохранено иначе, чем в изолированной среде.

Для сравнения, в моей изолированной среде я получил бы следующее:

> t = as.POSIXct("2018-04-09 09:05:25")
> t
[1] "2018-04-09 09:05:25 CEST"
> as.character(t)
[1] "2018-04-09 09:05:25"

тогда как в моем собственном коде с t из DataFrame я бы получил

> t = tb[i, "time"]
> t
[1] "2018-04-09 09:05:25 CEST"
> as.character(t)
[1] "1523257525"

То есть внутренне что-то другое, чего я, кстати, до сих пор не могу уловить.

Однако его можно «исправить» путем приведения следующим образом:

t = as.POSIXct(as.numeric(t), origin="1970-01-01")
person Jordi    schedule 29.06.2019