2013-01-22 13 views
7

Napotkałem coś nieoczekiwanego podczas pracy z funkcją strptime(). Format daty, którą mam składa się z "1/22/2013 11:00:00 P.M". Format, którego używam, to "% m /% d /% Y% I:% M:% S% p".Łańcuch AM/PM nie jest poprawnie rozpoznawany przez strptime

Kod jest następujący.

strptime("1/22/2013 11:00:00 p.m",format="%m/%d/%Y %I:%M:%S %p") 
[1] NA 

ale jeśli mogę użyć

strptime("1/22/2013 11:00:00 pm",format="%m/%d/%Y %I:%M:%S %p") 
[1] "2013-01-22 23:00:00" 

uzyskać odpowiedni efekt.

Tak więc funkcja ta nie zawiera strptime, aby wykryć p.m i jego odmiany, takie jak p.m. itp w miejsce PM lub pm. Czy jest to błąd w R?

Wersja R Używam R.14.2 na Windows 7 32-bitowych

+4

Należy ** ** bardzo ostrożny o zachowaniach etykiecie jako "błędy" w dowolnej ustalonej języku. Zawsze kuszące jest obwinianie oprogramowania, zwłaszcza nowego pakietu, którego nie znamy, ale w rzeczywistości tego rodzaju problemy praktycznie nigdy nie są błędami. (Jeśli nie jest to SAP, oczywiście :-)) –

Odpowiedz

11

To nie jest błąd, ale strptime oczekuje informacji w sposób znormalizowany. %p to:

Wskaźnik AM/PM w ustawieniach narodowych. Używany w połączeniu z '% I' i nie z '% H'. Pusty ciąg w niektórych lokalizacjach.

W Tobie locale ten jest zdefiniowany jako AM/am i PM/pm. R jest formalnym językiem i musisz trzymać się reguł, które narzuca. Jeśli zdefiniujesz czynnik z poziomami: flavor, color, taste, nie możesz oczekiwać, że będziesz w stanie używać colour i flavour jako sposobów odnoszenia się do tego czynnika. Chociaż wydaje się oczywiste, że reprezentują one tę samą koncepcję, R jest formalnym językiem pozbawionym ludzkiej elastyczności.

+2

pozbyć się kropek: 'gsub (" [.] "," \\ 1 "," 1/22/2013 11:00:00 pm ")' – Michael

2
library(lubridate) 
mdy_hms("01/22/2013 11:00:00 PM") 

Rezultat:

[1] "2013-01-22 11:00:00 UTC" 
+2

W przypadku, gdy ktoś się zastanawia, ta odpowiedź wydaje się używać pakietu "lubridate" – andrechalom

Powiązane problemy