转换为R中的本地时间 - 时区矢量

时间:2015-08-18 23:07:59

标签: timezone format strftime posixct posixlt

我有来自美国各地的一组数据,我试图将其转换为每个"主题"的当地时间。我在每个事件上都有UTC时间戳并将它们转换为POSIXct格式,但每次我尝试在任何POSIXct / POSIXlt函数中包含tz = DS$Factortz = as.character(DS$Factor)的向量(包括{{1} }和format())我收到一条错误消息:

  

as.POSIXlt.POSIXct(x,tz = tz)出错:无效' tz'值

如果我只是输入strftime()它可以正常工作,但当然并非我的所有值都来自该时区。

如何为每个"主题"

获取时间戳到当地时间?

tz = 'US/Eastern'有5个值:US / Arizona US / Central US / Eastern US / Mountain US / Pacific

谢谢, 速记

2 个答案:

答案 0 :(得分:2)

带上dplyr和lubridate,我做了类似的事情:

require(lubridate)
require(dplyr)

df = data.frame(timestring = c("2015-12-12 13:34:56", "2015-12-14 16:23:32"),
                localzone = c("America/Los_Angeles", "America/New_York"), stringsAsFactors = F)

df$moment = as.POSIXct(df$timestring, format="%Y-%m-%d %H:%M:%S", tz="UTC")

df = df %>% rowwise() %>% mutate(localtime = force_tz(moment, localzone))

df

答案 1 :(得分:0)

所以我能够创建一个for循环来执行此操作,但速度很慢,大约需要10分钟才能运行。我无法找出apply() sytnax,并且肯定会感谢一些帮助创建更快,更可并行化的方式来执行此操作,因为数据存储区有768,000个观测值并且正在增长。

>     require(lubridate)
>     
>     loct = NULL for (i in 1:nrow(DS))
>     {
>       loct[i] <- with_tz(DS$UTC[i],tzone =
>       ifelse(DS$timezone[i]=="","US/Eastern",as.character(DS$timezone[i])))
>     } DS$localtime <- as.POSIXct(loct, origin ="1970-01-01") remove (loct, i)