Schnellste Weg zu extrahieren Stunde aus-Zeit (HH:MM)
Wünschen fastPOSIXct
funktioniert - aber nicht in diesem Fall.
Hier ist meine Zeit-Daten (die nicht über Daten) - und ich brauche, um den Stunden-Teil von Ihnen.
times <- c("9:46","11:06", "14:17", "19:53", "0:03", "3:56")
Ist hier die falsche Ausgabe von fastPOSIXct
:
fastPOSIXct(times, "GMT")
[1] "1970-01-01 00:00:00 GMT" "1970-01-01 00:00:00 GMT"
[3] "1970-01-01 00:00:00 GMT" "1970-01-01 00:00:00 GMT"
[5] "1970-01-01 00:00:00 GMT" "1970-01-01 00:00:00 GMT"
Erkennt es nicht, die Zeiten ohne die Anwesenheit der Daten korrekt.
Den hour
Methode von data.table
mit as.ITime
löst der Zweck, sondern sieht aus wie langsam am großen mal-arrays.
library(data.table)
hour(as.ITime(times))
# [1] 9 11 14 19 0 3
Frage mich, ob es etwas schneller Weg (wie fastPOSIXct
funktioniert aber ohne die Notwendigkeit für Datum).
fastPOSIXct
funktioniert wirklich wie snap, aber einfach falsch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie auch versuchen
substr
:as.integer(substr(vals, start = 1, stop = nchar(vals) - 3))
In einem benchmark auf einem Vektor mit 10e6 Elemente
stringi::stri_sub
ist am schnellsten, undsubstr
Nummer zwei.Können Sie dies auch tun, mit der
times
Funktion aus derchron
Paket:Wenn Geschwindigkeit wichtig ist, ziehen Sie die Stunden schneller mit einem string-manipulation:
times
undas.POSIXlt
(von @tonytonov Lösung) zu sein scheinen etwas schneller alsas.ITime
, und der string-manipulation ist viel schneller:as.numeric(sub(pattern = ":.*", replacement = "", x = vals)
kann auch hier schneller.Ist das eine option? Dies ist ein
base
Lösung.Wirklich zu beschleunigen, können Sie auch einfach schneiden Sie die lsat 3 chars aus den Saiten. Es ist schneller als mit
regex
.Hier sind benchmark-Ergebnisse
Können Sie die
stri_sub
Funktion aus der stringi Paket und schneiden Sie die letzten 3 Zeichen wie diese:Wenn
from
- und/oderto
Parameter negativ sind, dann zählen wird durchgeführt vom Ende einer Zeichenfolge. So in diesem Beispiel wird der Teilstring ab dem ersten Zeichen bis die vierte aber gerechnet ab dem Ende der Zeichenfolge.stri_sub
Funktion. Es tut gut in der benchmark in meiner Antwort!str_sub
odersubstr
wird immer nützlich sein, in dieser situation. Zum Beispiel, der folgende code ist fürsubstr
: