Мне дали огромный набор данных, который содержит поля широты, долготы, локальной даты и местного времени. Я пытаюсь организовать эту информацию в поле времени UTC ISO. У меня проблема с моим кодом, потому что я не знаю, как использовать as.POSIXct (), когда в данных есть несколько часовых поясов. Всякий раз, когда я пытаюсь использовать массив или цикл в части tz =, я получаю сообщение об ошибке.
Я использовал функцию tz_lookup_coords () из пакета lutz для определения часового пояса каждой строки во фрейме данных. Я также смог отфильтровать свои данные в одном часовом поясе и успешно использовал функции as.POSIXct () и format () для получения времени UTC. Однако я хотел бы, чтобы более элегантное решение применял один код ко всему набору данных.
sample<- data.frame(
"localDate" = c("2015-04-20","2016-07-17","2015-08-06"),
"localTime" = c("14:00", "14:46", NA ),
"timeZone" = c("Pacific/Pago_Pago", NA , "Pacific/Honolulu")
)
# Change times from local to UTC
sample$localDateTime <- paste(sample$localDate, sample$localTime, sep = " ")
for (i in 1:nrow(sample)) {
sample[i,]$localDateTime <- as.POSIXct(sample[i,]$localDateTime, tz= sample[i,]$timeZone, "%Y-%m-%d %H:%M")
}
sample$eventDate <- format(sample$localDateTime, tz= "UTC", usetz = TRUE)
Когда я вхожу в один часовой пояс, такой как "Pacific / Honolulu", код прекрасно работает, но он будет обрабатывать каждую строку, как если бы она находилась в одном часовом поясе.
> sample
localDate localTime timeZone localDateTime eventDate
1 2015-04-20 14:00 Pacific/Pago_Pago 2015-04-20 14:00 2015-04-21 00:00:00 UTC
2 2016-07-17 14:46 Pacific/Saipan 2016-07-17 14:46 2016-07-18 00:46:00 UTC
3 2015-08-06 10:35 Pacific/Honolulu 2015-08-06 10:35 2015-08-06 20:35:00 UTC
Если я попытаюсь использовать что-либо кроме символьной строки в кавычках для части функции tz =, я получу этот код:
Error in strptime(x, format, tz = tz) : invalid 'tz' value