lubridate, konvertieren von Datum-Uhrzeit auf einen formatierten Zeit-string
Ich weiß nicht, warum es nicht funktioniert. Hier ist mein code:
> t <- hms("14:11:49")
> t
[1] "14H 11M 49S"
t <- t + minutes(3)
> format(t, format="%H:%M:%S")
[1] "14H 14M 49S"
# Expected output: "14:14:49"
Update:
Aktuell fand ich diese Lösung, aber ich hoffe, es ist eine mehr elegante:
t <- hms("14:11:49") # example period object
sprintf("%s:%s:%s", hour(t), minute(t), second(t))
#"14:11:49"
InformationsquelleAutor biocyberman | 2014-09-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht sicher, warum Sie brauchen, um zu konvertieren, um
hms
und zurück zu den ursprünglichen string-format. Vielleichtparse_date_time
Funktion ist, was Sie brauchen:EDIT:
Wir können
paste
:Benchmark-Ausgang:
Ich halte (paranoically) das string-format speichern einige bytes für jeden Eintrag beim schreiben in die text-Datei. Ihre Lösung allerdings nicht tut, was ich versuche zu erreichen. Diese Linie ist
chicken-egg
problem:POSIXct_myTime <- parse_date_time(myTime,"hms")
. Ich habe nicht myTime im string-format. Ich Las Millionen von Einträgen in%H:%M:%S
format, filtern Sie und wollen zurück zu schreiben aus genau dem gleichen format wie der Eingang."...der format-string speichern einige bytes für jeden Eintrag beim schreiben in die text-Datei..." - nicht sicher, dies ist wahr... Auch, "...ich habe nicht myTime im string-format..." - in Ihrem Beitrag, den Sie übergeben einen string zu hms -
hms("14:11:49")
Sorry für die Verwirrung. Ich nur den line
hms("14:11:49")
nur um ein Objekt aus einem Zeit-string. Mein workflow ist wie folgt: Lesen Sie in Millionen von Einträgen der time string; verwenden lubridate, um einige der Berechnung; die schreiben wieder aus, um text-Datei das Ergebnis. Bitte überprüfen Sie die Anfang meine aktualisierte FrageIch vergaß den
paste
Funktion in diesem Fall. Aber ich hatte gehofft, dass es einen Weg gibt, um zu vermeiden, aufrufenhour
,minute
undsecond
. Mein Gedanke: Dielubridate
Paket ist offensichtlich sehr gut im Lesen in vielen Eingangs-Datum-Zeit-Formate, aber nicht sehr gut an was die Ausgänge wieder raus.InformationsquelleAutor zx8754
Das problem ist, dass
class(t)
ist "Zeit" und dieformat.Period()
Funktion keinen parameter fürformat=
. Diet
Objekt ist nicht ein standard -POSIXt
style-Objekt, Sie können verwendet werden zur Verwendung mitformat()
. Nur dieformat.POSIXct()
undformat.POSIXlt()
Funktionen Verhalten sich so.So vielleicht die einfachste Sache zu tun wäre, um zu definieren, eine Helfer-Funktion schalten Sie den
Period
Klasse inPOSIXct
. Kann man das mit:Es ist wichtig zu beachten, dass
POSIXct
ist ein Datum/Zeit-Wert, nicht nur einen Zeit-Wert. Also standardmäßig haben wir nur annehmen, es begann um Mitternacht heute. Aber dann können wir ein format in der Art und Weise Sie wollteIch muss zugeben, ich bin kein Experte
lubridate
user so vielleicht habe ich es übersehen, eine offensichtliche Funktion, aber es scheint, die Optionen für die Formatierunglubridate
Klassen in "schön" formatiert sind sehr begrenzt.format.POSIXct()
undformat.POSIXlt()
Funktionen.Gut, deine ursprüngliche Frage war nur, Sie wusste nicht, warum es nicht funktioniert, es war nicht um eine "Lösung" für irgendetwas. Wenn das nicht deine eigentliche Frage, dann würde ich versuchen, besser zu Wort, um Ihre Fragen in der Zukunft. Ich habe nur die Umstellung, weil Sie scheinen wirklich wollen, verwenden Sie die
format
Funktion mit der"%H:%M:%S"
syntax.InformationsquelleAutor MrFlick