如何将UTC时间戳转换为R数据帧中的多个本地时区?

如何将UTC时间戳转换为R数据帧中的多个本地时区?,r,dataframe,lubridate,R,Dataframe,Lubridate,我有一个数据帧df,它有两列(utc时间戳和时区),我想创建一列,显示本地时基本地时区。我试了以下几样东西 This is my dataframe df<-data.frame(utc_time_stamp=c("2019-04-28 18:35:26","2019-04-28 21:28:58","2019-04-28 18:59:01"),time_zone=c("Asia/Tokyo","

我有一个数据帧df,它有两列(utc时间戳和时区),我想创建一列,显示本地时基本地时区。我试了以下几样东西

This is my dataframe 

df<-data.frame(utc_time_stamp=c("2019-04-28 18:35:26","2019-04-28 21:28:58","2019-04-28 18:59:01"),time_zone=c("Asia/Tokyo","Australia/Brisbane","Etc/GMT-12"))


#This is what I tried 

df$utc_time_stamp<-as.POSIXct(df$utc_time_stamp,format="%Y-%m-%d %H:%M:%S",tz='GMT')


df$new_local_time<-format(df$utc_time_stamp,tz=df$time_zone,usetz=TRUE)



#This is the error I get 

Error in as.POSIXlt.POSIXct(x, tz) : invalid 'tz' value
这是我的数据帧
df您在a)因子和b)传递向量方面有问题。因此,一种解决方案是将
stringsAsFactors
设置为
FALSE
,并创建一个函数来
矢量化您的输入:

df <- data.frame(..., stringsAsFactors=FALSE)

df$utc_time_stamp <- as.POSIXct(df$utc_time_stamp, format="%Y-%m-%d %H:%M:%S", tz='GMT')

tz_v <- Vectorize(function(x,y) {format(x, tz=y, usetz=TRUE)})

df$new_local_time <- tz_v(df$utc_time_stamp, df$time_zone)
df

如果我想在Sparkyr中做同样的事情,这个脚本将如何改变?如果df是大文件(5GB),那么“df$new\u local\u time可能是一个带有
dplyr
df%>%group\u by(time\u zone)%%>%mutate(new\u local\u time=format(utc\u time\u stamp,tz=time\u zone,usetz=TRUE))的tidyverse解决方案。如果手头没有一个大的ds,我很难说。这与“tz\u v”相当,它适用于我发布的df版本。我注意到你在原来的帖子里有时区而不是时区。可能是这样吗?请注意,列不能在不同的时区中具有日期时间。“新本地时间”必须是字符串。
>>>        utc_time_stamp          time_zone           new_local_time
>>> 1 2019-04-28 18:35:26         Asia/Tokyo  2019-04-29 03:35:26 JST
>>> 2 2019-04-28 21:28:58 Australia/Brisbane 2019-04-29 07:28:58 AEST
>>> 3 2019-04-28 18:59:01         Etc/GMT-12  2019-04-29 06:59:01 +12