我有来自美国各地的一组数据,我试图将其转换为每个"主题"的当地时间。我在每个事件上都有UTC时间戳并将它们转换为POSIXct格式,但每次我尝试在任何POSIXct / POSIXlt函数中包含tz = DS$Factor
或tz = 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
谢谢, 速记
答案 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)