Как преобразовать временные метки UTC в несколько локальных часовых поясов в R Data Frame? - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть фрейм данных df, и он имеет 2 столбца (временные метки 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_zonne=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

1 Ответ

1 голос
/ 30 апреля 2019

У вас проблема с а) факторами и б) прохождением векторов. Таким образом, одно решение состоит в том, чтобы установить stringsAsFactors в FALSE и создать функцию для Vectorize ваших входных данных:

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

Выход:

>>>        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
...