Es gibt zwei allgemeine Regeln dafür:
- nicht Daten und Zeiten Verwenden Sie reguläre Ausdrücke für
Parsen
- Folgen Regel 1.
In allen Ernstes, verwenden ein Datetime Parser von denen R hat viele. Aber ein Schlüssel hier ist, dass Sie eine Zeit haben und noch nicht ein Datum, so dass Sie noch nicht als datetime analysieren können.
So so etwas tun:
R> tstr <- "225014.09"
R> dtstr <- paste("2026-01-01", tstr) # which date does not matter
R> pt <- anytime(dtstr) # now it is parsed
R> pt
[1] "2026-01-01 22:50:14.08 CST"
R> tstr <- "225014.09"
R> dtstr <- paste("2016-01-01", tstr) # which date does not matter
R> pt <- anytime(dtstr) # now it is parsed
R> pt
[1] "2016-01-01 22:50:14.08 CST"
R> hhmmss <- format(pt, "%H:%M:%OS")
R> hhmmss
[1] "22:50:14.089999"
R>
Jetzt haben wir die bevorzugten hh: mm: ss.ff mit Sekundenbruchteilen - mein Standard ist, aber Sie können eine Feinabstimmung:
R> options(digits.secs=2)
R> hhmmss <- format(pt, "%H:%M:%OS")
R> hhmmss
[1] "22:50:14.08"
R>
Die Tatsache, dass '09' auf '08' gerundet wurde, ist eines dieser Dinge mit Fließkomma-Mathematik und kann nicht durch die Art der Analyse oder Formatierung geändert werden - es ist eine Einschränkung der zugrunde liegenden Darstellung.
'as.POSIXct ('225014.09', tz = 'UTC', Format = '% H% M% OS')', obwohl das heutige Datum eingefügt wird. – alistaire
Wenn Sie ein Datetime-Objekt nicht interessieren/wollen, können Sie den String erstellen, indem Sie ihn trennen und die Doppelpunkte einfügen: 't <- 225014.09; paste0 (substr (t, 1,2), ":", substr (t, 3,4), ":", substr (t, 5,6)) ' – SymbolixAU
Regex-Version der Zeichenfolge:' gsub ('(..) (..) (..) \\. (. +) ',' \\ 1: \\ 2: \\ 3 (: \\ 4) ',' 225014.09 ') ' – alistaire