часовой пояс из последовательности дат POSIXct потерян при приведении к data.frame в R - PullRequest
0 голосов
/ 10 мая 2018

Я хотел бы сохранить CET, CEST часть последовательности данных, сгенерированной ниже.

seq(as.POSIXct("2018-10-01"), as.POSIXct("2018-10-02"), "hour")
myvector <- seq(as.POSIXct("2018-10-01"), as.POSIXct("2018-10-02"), "hour")
myvector
mydf <- as.data.frame(myvector)

Который в консоли выглядит так:

> head(seq(...))

[1] "2018-10-01 00:00:00 CEST" "2018-10-01 01:00:00 CEST" "2018-10-01 02:00:00 CEST" "2018-10-01 03:00:00 CEST" "2018-10-01 04:00:00 CEST" "2018-10-01 05:00:00 CEST"

> head(myvector)

[1] "2018-10-01 00:00:00 CEST" "2018-10-01 01:00:00 CEST" "2018-10-01 02:00:00 CEST" "2018-10-01 03:00:00 CEST" "2018-10-01 04:00:00 CEST" "2018-10-01 05:00:00 CEST"

> head(mydf)
             myvector
1 2018-10-01 00:00:00
2 2018-10-01 01:00:00
3 2018-10-01 02:00:00
4 2018-10-01 03:00:00
5 2018-10-01 04:00:00
6 2018-10-01 05:00:00
> 

Когда я призываю его к data.frame, он теряется. Я не знаю, как сохранить его, я пробовал такие вещи, как:

attr(mydf$myvector, "tzone") <- attr(myvector, "tzone"), но tzone на самом деле не является атрибутом, поэтому он не работает.

Что такое CEST/CET в POSIXct? Как я могу сохранить его при принуждении к df?

Спасибо

1 Ответ

0 голосов
/ 18 мая 2018

Вам нужно применить as.POSIXlt к столбцу POSIXct, прежде чем извлекать часовой пояс из него

#Extract timezone from POSIXct column of a dataframe
mydf$timezone <- attr(as.POSIXlt(mydf$myvector), "tzone")[1]

head(mydf)
#             myvector      timezone
#1 2018-10-01 00:00:00 Europe/Berlin
#2 2018-10-01 01:00:00 Europe/Berlin
#3 2018-10-01 02:00:00 Europe/Berlin
#4 2018-10-01 03:00:00 Europe/Berlin
#5 2018-10-01 04:00:00 Europe/Berlin
#6 2018-10-01 05:00:00 Europe/Berlin

Пример данных:

myvector <- seq(as.POSIXct("2018-10-01"), as.POSIXct("2018-10-02"), "hour")
head(myvector)
#[1] "2018-10-01 00:00:00 CEST" "2018-10-01 01:00:00 CEST" "2018-10-01 02:00:00 CEST"
#[4] "2018-10-01 03:00:00 CEST" "2018-10-01 04:00:00 CEST" "2018-10-01 05:00:00 CEST"

mydf <- as.data.frame(myvector)
head(mydf$myvector)
#[1] "2018-10-01 00:00:00 CEST" "2018-10-01 01:00:00 CEST" "2018-10-01 02:00:00 CEST"
#[4] "2018-10-01 03:00:00 CEST" "2018-10-01 04:00:00 CEST" "2018-10-01 05:00:00 CEST"    


Альтернативный подход: Если вы действительно заботитесь о CET или CEST только вывод

mydf$timezone <- gsub("^.*\\s", "", format(mydf$myvector, usetz = TRUE))

head(mydf)
#             myvector timezone
#1 2018-10-01 00:00:00     CEST
#2 2018-10-01 01:00:00     CEST
#3 2018-10-01 02:00:00     CEST
#4 2018-10-01 03:00:00     CEST
#5 2018-10-01 04:00:00     CEST
#6 2018-10-01 05:00:00     CEST
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...