В пакете R lubridate функция часа возвращает неправильный час - PullRequest
1 голос
/ 28 июня 2019

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

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

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

Джорди

Ответы [ 2 ]

0 голосов
/ 29 июня 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")
0 голосов
/ 28 июня 2019

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

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