我有一个这样的数据帧:
library(dplyr)
data <- data_frame(
timestamp_utc = c('2015-11-18 03:55:04', '2015-11-18 03:55:08',
'2015-11-18 03:55:10'),
local_tz = c('America/New_York', 'America/Los_Angeles',
'America/Indiana/Indianapolis')
)
我需要创建一个新变量,将UTC时间戳转换为local_tz
列中定义的本地时间。然而,format
和with_tz
(来自lubridate
)都只需要一个时区,而不是时区的向量。我在找这样的东西:
mutate(data, timestamp_local = with_tz(timestamp_utc, tzone = local_tz))
有什么想法吗?
发布于 2015-11-22 05:26:02
首先,确保您的数据是作为日期加载的-我必须首先转换为日期:
data$timestamp_utc <- as.POSIXct(data$timestamp_utc, tz = "UTC")
然后,您可以将dplyr
中的函数rowwise
与do
结合使用
library(lubridate)
library(dplyr)
z <- data %>% rowwise() %>%
do(timestamp_local = with_tz(.$timestamp_utc, tzone = .$local_tz))
data$timestamp_local <- z$timestamp_local
data$timestamp_local
[[1]]
[1] "2015-11-17 22:55:04 EST"
[[2]]
[1] "2015-11-17 19:55:08 PST"
[[3]]
[1] "2015-11-17 22:55:10 EST"
我们需要使timestamp_local列成为一个列表,否则所有的时区都会转换回一个,在一个向量中只能有一个时区)。
发布于 2019-01-08 01:54:51
诀窍是在使用mutate()
之前先将group_by()
与local_tz
一起使用
data$timestamp_utc <- as.POSIXct(data$timestamp_utc, tz = "UTC")
data %>%
group_by(local_tz) %>%
mutate(timestamp_local = with_tz(timestamp_utc, local_tz))
发布于 2020-07-31 08:45:23
data.table选项对我来说效果很好:
data[, timestamp_local := with_tz(timestamp_utc, local_tz), by=local_tz]
https://stackoverflow.com/questions/33848563
复制相似问题