根据 R 中其他列中的时区转换日期时间

问题描述 投票:0回答:1

下面的时区标题与 OlsonNames() 匹配的国家/地区和所选时区正确,以及带有时区 UTC0 的日期的示例数据

Timezone <- tibble(
  Country = c("Germany", "Poland", "Austria", "Hungary", "Czech Republic", "Ireland", "Cyprus", "Egypt",
              "Spain", "France", "Greece", "Croatia", "Italy", "Morocco", "Portugal", "Bulgaria", "Romania",
              "Switzerland", "Denmark", "Estonia", "Iceland", "Lithuania", "Latvia", "Montenegro", "Malta",
              "Netherlands", "Norway", "Slovenia", "Slovakia", "United Kingdom", "Sweden", "Ukraine"),
  tz_new = c("Europe/Berlin", "Europe/Warsaw", "Europe/Vienna", "Europe/Budapest", "Europe/Prague",
               "Europe/Dublin", "Asia/Nicosia", "Africa/Cairo", "Europe/Madrid", "Europe/Paris", "Europe/Athens",
               "Europe/Zagreb", "Europe/Rome", "Africa/Casablanca", "Europe/Lisbon", "Europe/Sofia", "Europe/Bucharest",
               "Europe/Zurich", "Europe/Copenhagen", "Europe/Tallinn", "Atlantic/Reykjavik", "Europe/Vilnius", "Europe/Riga",
               "Europe/Podgorica", "Europe/Malta", "Europe/Amsterdam", "Europe/Oslo", "Europe/Ljubljana", "Europe/Bratislava",
               "Europe/London", "Europe/Stockholm", "Europe/Kiev")
)

#sample df 
temp <- tibble(
  ID = 1:5,
  Value = c(10, 20, 15, 30, 25),
  Country = c("Morocco", "Iceland", "Ireland", "Germany", "Poland"),
  Date1 = as.POSIXct(c("2023-08-08 12:00:00", "2023-08-08 13:00:00", "2023-08-08 14:00:00", "2023-08-08 15:00:00", "2023-08-08 16:00:00"), tz = "UTC"),
  Date2 = as.POSIXct(c("2023-08-09 12:00:00", "2023-08-09 13:00:00", "2023-08-09 14:00:00", "2023-08-09 15:00:00", "2023-08-09 16:00:00"), tz = "UTC"),
  Date3 = as.POSIXct(c("2023-08-10 12:00:00", "2023-08-10 13:00:00", "2023-08-10 14:00:00", "2023-08-10 15:00:00", "2023-08-10 16:00:00"), tz = "UTC")
)

我创建了时区 tibble 并将其加入到我的数据中。尝试根据 tz_new 将日期转换为时区,但没有成功。它按第一个匹配的时区进行转换

df <-temp %>%
left_join(Timezone, by = "Country") %>%
group_by(tz_new) %>%
mutate(across(where(is.POSIXct), ~with_tz(.x, tz_new)
r timezone tidyverse lubridate
1个回答
0
投票

感谢 NicChr 评论,我更改了代码并测试了它

data <- temp%>%
  left_join(Timezone, by = "Country") %>%
  group_nest(Country) %>%
  mutate(data = map(data, ~ mutate(.x, across(where(is.POSIXct), ~ with_tz(.x, tzone = tz_new)))))

上面的代码可以很好地转换不同的时区,但是当我取消嵌套(数据)时,它只允许一个时区

© www.soinside.com 2019 - 2024. All rights reserved.