Преобразование часового пояса с использованием синтаксиса dplyr и функции attr - PullRequest
1 голос
/ 31 октября 2019

Я пытаюсь преобразовать часовой пояс, используя только синтаксис dplyr и функцию attr, без загрузки других пакетов.

Представляет:

dt1 <- as.POSIXct("2010-01-01 08:00:00", tz = "GMT")
dt <- seq(dt1, length = 10, by = "1 day")

Я могу преобразовать в нужный часовой пояс, используя attr:

attr(dt, "tzone")
[1] "GMT"

attr(dt, "tzone") <- "Australia/Sydney" # convert to intended tz

Что меня интересует, как мне включить attr в синтаксис dplyr :: mutate?

1 Ответ

1 голос
/ 31 октября 2019

Что касается решения с поддержкой цепочек (я полагаю, это то, что вы подразумеваете под "использованием синтаксиса dplyr"), вы можете использовать .POSIXct как в

library(magrittr)
dt %>% .POSIXct(tz = "Australia/Sydney")
#[1] "2010-01-01 19:00:00 AEDT" "2010-01-02 19:00:00 AEDT"
#[3] "2010-01-03 19:00:00 AEDT" "2010-01-04 19:00:00 AEDT"
#[5] "2010-01-05 19:00:00 AEDT" "2010-01-06 19:00:00 AEDT"
#[7] "2010-01-07 19:00:00 AEDT" "2010-01-08 19:00:00 AEDT"
#[9] "2010-01-09 19:00:00 AEDT" "2010-01-10 19:00:00 AEDT"

Вот минимальное значение dplyr::mutate пример

data.frame(dt = dt) %>%
    mutate(dt_Australia = .POSIXct(dt, tz = "Australia/Sydney"))
#                    dt        dt_Australia
#1  2010-01-01 08:00:00 2010-01-01 19:00:00
#2  2010-01-02 08:00:00 2010-01-02 19:00:00
#3  2010-01-03 08:00:00 2010-01-03 19:00:00
#4  2010-01-04 08:00:00 2010-01-04 19:00:00
#5  2010-01-05 08:00:00 2010-01-05 19:00:00
#6  2010-01-06 08:00:00 2010-01-06 19:00:00
#7  2010-01-07 08:00:00 2010-01-07 19:00:00
#8  2010-01-08 08:00:00 2010-01-08 19:00:00
#9  2010-01-09 08:00:00 2010-01-09 19:00:00
#10 2010-01-10 08:00:00 2010-01-10 19:00:00
...