首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带有时区矢量的with_tz

带有时区矢量的with_tz
EN

Stack Overflow用户
提问于 2015-11-22 05:05:27
回答 4查看 1.8K关注 0票数 9

我有一个这样的数据帧:

代码语言:javascript
复制
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列中定义的本地时间。然而,formatwith_tz (来自lubridate)都只需要一个时区,而不是时区的向量。我在找这样的东西:

代码语言:javascript
复制
mutate(data, timestamp_local = with_tz(timestamp_utc, tzone = local_tz))

有什么想法吗?

EN

回答 4

Stack Overflow用户

发布于 2015-11-22 05:26:02

首先,确保您的数据是作为日期加载的-我必须首先转换为日期:

代码语言:javascript
复制
data$timestamp_utc <- as.POSIXct(data$timestamp_utc, tz = "UTC")

然后,您可以将dplyr中的函数rowwisedo结合使用

代码语言:javascript
复制
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列成为一个列表,否则所有的时区都会转换回一个,在一个向量中只能有一个时区)。

票数 6
EN

Stack Overflow用户

发布于 2019-01-08 01:54:51

诀窍是在使用mutate()之前先将group_by()local_tz一起使用

代码语言:javascript
复制
data$timestamp_utc <- as.POSIXct(data$timestamp_utc, tz = "UTC")

data %>% 
  group_by(local_tz) %>%
  mutate(timestamp_local = with_tz(timestamp_utc, local_tz))
票数 2
EN

Stack Overflow用户

发布于 2020-07-31 08:45:23

data.table选项对我来说效果很好:

代码语言:javascript
复制
data[, timestamp_local := with_tz(timestamp_utc, local_tz), by=local_tz]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33848563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档