Pracuję z danymi .csv, które zostały wyeksportowane z Teradata. Kilka kolumn było pierwotnie znacznikami czasowymi ze strefami czasowymi, więc po załadowaniu pliku .csv w R chciałbym przekonwertować te kolumny (które są ładowane jako łańcuchy) na POSIXlt lub POSIXct. Używam strptime
, ale format strefy czasowej z pliku .csv nie jest zgodny z oczekiwaniami, które oczekiwałby strptime
. Na przykład oczekuje on od -0400
, ale plik .csv ma format -04:00
, w którym dwukropek oddziela godziny i minuty.Użycie strptime% z ze specjalnym formatem strefy czasowej
Mogę usunąć dwukropek, ale jest to dodatkowy krok i komplikacja, której chciałbym uniknąć, jeśli to możliwe. Czy istnieje sposób, aby powiedzieć strptime
, aby użyć innego formatu strefy czasowej (%z
)?
Oto przykład:
## 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"
Więc szukam, aby osiągnąć ten ostatni wynik używając coś jak strptime(x,"%Y-%m-%d %H:%M:%OS%zz")
, gdzie %zz
jest zwyczaj wyrażenie dla strefy czasowej, która rozpoznaje formatu na -04:00
. Lub %zH:%zM
może być jeszcze lepiej.
Jeśli nie jest to możliwe, czy ktoś ma elastyczną/elastyczną funkcję do konwersji ciągów (różnych formatów) do dat dla wielu kolumn danych data.frame/data.table?
Jest 2016, a świat wciąż mając do czynienia z tym ... – sehe