2012-11-28 6 views
9

Wie kann ich dieses Datumsformat analysieren? Soll ich diesen Doppelpunkt in einen Punkt umwandeln oder kennt jemand vielleicht eine bessere Lösung?Doppelpunkt im Datumsformat zwischen Sekunden und Millisekunden. Wie in R zu analysieren?

> x <- "2012.01.15 09:00:02:002" 
> strptime(x, "%Y.%m.%d %H:%M:%S:%OS") 
[1] "2012-01-15 09:00:02" 
> strptime(x, "%Y.%m.%d %H:%M:%OS") 
[1] "2012-01-15 09:00:02" 
> x <- "2012.01.15 09:00:02.002" 
> strptime(x, "%Y.%m.%d %H:%M:%OS") 
[1] "2012-01-15 09:00:02.001" 
+0

Beide Antworten sind richtig +1! aber persönlich bevorzuge ich gsubfn: D –

+1

Wissen Sie eigentlich, dass die Zahl nach dem letzten Doppelpunkt Sekundenbruchteile ist? Es könnte etwas anderes sein, wie Frames. – John

Antwort

8

Es gibt eine feine Unterscheidung hier, die dich vielleicht abwerfen kann. Als ?strptime Hinweise:

für 'strptime' '% O' werden Eingabe Sekunden einschließlich Sekundenbruchteil.

Um zu betonen, dass ein bisschen, %OS die Sekunden einschließlich Sekundenbruchteilen darstellen --- nicht nur den Bruchteil der Sekunden: Wenn der Wert Sekunden 44,234, %OS oder %OS3 stellt 44,234, nicht .234

So ist die Lösung in der Tat ein . die letzten : zu ersetzen.

Hier ist eine Art und Weise Sie das tun könnten:

x <- "2012.01.15 09:00:02:002" 
strptime(gsub(":", ".", x), "%Y.%m.%d %H.%M.%OS") 
+0

+1. Ich denke, dass das OP schon alles wusste - Sie werden bemerken, dass er diese Tatsache in den letzten Dingen, die er versucht hat, verwendet - aber es ist wahrscheinlich nützlich für andere Leute, die diese Frage vielleicht haben. – ruakh

+0

@ruakh - Guter Punkt, und ich vermute, du hast Recht. Ich mag, dass das Zitat aus "? Strptime" den Punkt extra eindeutig macht. –

+0

Ja, ich habe den Doppelpunkt in Punkte umgewandelt. Thx für schnelle Antwort :) –

2

Würde

strptime(gsub(":", ".", x), "%Y.%m.%d %H.%M.%OS3") 

betrügen?

+0

'sub' ersetzt nur die erste Instanz von': 'mit einem' .' statt jeder Instanz. du wirst 'gsub' dafür nach @JoshO'Briens Antwort brauchen – Justin

+0

@Justin: Ich denke, ich hätte das schon korrigiert, als du kommentiert hast, aber danke. :-) – ruakh