2013-04-05 10 views
8

ten powinien być szybki - jesteśmy analizowania następujący format w R:analizowaniem ISO8601 w R

2013-04-05T07: 49: 54-07: 00

Moje obecne podejście jest

require(stringr) 
timenoT <- str_replace_all("2013-04-05T07:49:54-07:00", "T", " ") 
timep <- strptime(timenoT, "%Y-%m-%d %H:%M:%S%z", tz="UTC") 

ale daje to NA.

+1

'% z' to podpisane przesunięcie w godzinach, w formacie' hhmm', a nie 'hh: mm'. –

+0

Rozumiem - najlepsze rozwiązanie, aby zastąpić ":"? – Rico

Odpowiedz

12

%z to podpisane przesunięcie w godzinach, w formacie hhmm, a nie hh:mm. Oto jeden ze sposobów usunięcia ostatniego :.

newstring <- gsub("(.*).(..)$","\\1\\2","2013-04-05T07:49:54-07:00") 
(timep <- strptime(newstring, "%Y-%m-%dT%H:%M:%S%z", tz="UTC")) 
# [1] "2013-04-05 14:49:54 UTC" 

Należy również pamiętać, że nie masz do usunięcia "T".

+1

To wydaje się zbyt ogólny wzór. Myślę, że coś takiego byłoby mniej podatne na przesadną korektę: 'gsub (" ([+ -] \\ d \\ d) (:) "," \\ 1 ", argvec)' –

-1

strptime("2013-04-05 07:49:54-07:00", "%Y-%m-%d %H:%M:%S", tz="UTC") daje 2013-04-05 07:49:54 UTC

Spróbuj

timep <- strptime(timenoT, "%Y-%m-%d %H:%M:%S", tz="UTC") 
+0

To nieprawda, ponieważ czas nie jest 7:49:54 UTC, 7 godzin za UTC. Więc jeśli wyrażasz to w UTC, będzie to 7 godzin przed 7: 49,54. –

2

nie zrobić wymianę strun.

NA po prostu oznacza, że ​​cała nie działa, więc zrobić to kawałki zbudować wyrażenie:

R> strptime("2013-04-05T07:49:54-07:00", "%Y-%m-%d") 
[1] "2013-04-05" 
R> strptime("2013-04-05T07:49:54-07:00", "%Y-%m-%dT%H:%M") 
[1] "2013-04-05 07:49:00" 
R> strptime("2013-04-05T07:49:54-07:00", "%Y-%m-%dT%H:%M:%S") 
[1] "2013-04-05 07:49:54" 
R> 

Również ze względów nigdy w pełni zrozumiałe - lecz prawdopodobnie przebywać z funkcji biblioteki C bazowego , %z działa tylko na wyjściu, a nie na wejściu. Tak więc Twoja NA najprawdopodobniej pochodzi z twojego używania %z.

+0

'% z' działa na wejściu, ale format jest inny. '% Z' działa tylko na wyjściu. –

+0

Ah, tak, dziękuję. Moje rozwiązanie wciąż działa bez pakietu regexp lub Hadley. Tak więc z naszej definicji wygrywam. –

+0

Wykonuje wszystkie te czynności, a jako dodatkowy bonus zapewnia złą odpowiedź. :) –