Я работаю с CSV-данными, которые были экспортированы из Teradata. Несколько столбцов были первоначально временными метками с часами, поэтому после загрузки .csv в R я хотел бы преобразовать эти столбцы (которые загружаются как строки) в POSIXlt или POSIXct. Я использую strptime
, но формат часового пояса из CSV-файла не соответствует ожидаемому strptime
. Например, он ожидает -0400
, но CSV имеет формат -04:00
, где двоеточие отделяет часы и минуты.Использование strptime% z со специальным форматом часового пояса
Я могу удалить двоеточие, но это дополнительный шаг и осложнение, которое я хотел бы избежать, если это возможно. Есть ли способ сообщить strptime
использовать другой формат для часового пояса (%z
)?
Вот пример:
## Example data:
x <- c("2011-10-12 22:17:13.860746-04:00", "2011-10-12 22:17:13.860746+00:00")
format <- "%Y-%m-%d %H:%M:%OS%z"
## Doesn't work:
strptime(x,format)
## [1] NA NA
## Ignores the timezone:
as.POSIXct(x)
## [1] "2011-10-12 22:17:13 EDT" "2011-10-12 22:17:13 EDT"
## Remove the last colon:
x2 <- gsub("(.*):", "\\1", x)
x2
## [1] "2011-10-12 22:17:13.860746-0400" "2011-10-12 22:17:13.860746+0000"
## This works, but requires extra processing (removing the colon)
strptime(x2,format)
## [1] "2011-10-12 22:17:13" "2011-10-12 18:17:13"
Поэтому я ищу, чтобы достичь этого последнего результата, используя что-то вроде strptime(x,"%Y-%m-%d %H:%M:%OS%zz")
, где %zz
обычай выражение для часового пояса, который распознает формат -04:00
. Или %zH:%zM
может быть даже лучше.
Если это невозможно, может ли кто-нибудь использовать функцию slick/flexible для преобразования строк (различных форматов) в даты для нескольких столбцов data.frame/data.table?
Это 2016 и мир по-прежнему приходится иметь дело с этим ... – sehe