Berechnen der Zeitdifferenz zwischen zwei Spalten
Frage
Nach der Konvertierung der Faktoren in das POSIXCT-Format und der anschließenden Anwendung des Datetime-Formats möchte ich die Datetime-Differenz zwischen 2 pos1 und pos2 ermitteln.
Wenn ich das jedoch für ein bestimmtes Element mache, erhalte ich die richtige Antwort in der Konsole, aber wenn ich den Vorgang für den gesamten Satz ausführe, gibt die Konsole nur Zahlen aus und auch der Datumsrahmen spiegelt diese Zahlen wider, wie Sie sehen können.
Wie kann ich die Stunden im Datenrahmen abrufen, wenn ich versuche, die Differenz zu ermitteln?Ich verwende das Lubridate-Paket. Gibt es dafür eine Funktion?
Hier ist ein Beispielcode/Bild der Daten in RStudio, die es beschreiben
CR_Date <- data.frame(
pos1="2014-07-01 00:00:00",
pos2=c("2014-07-01 00:00:00","2014-07-01 10:15:00")
)
CR_Date[] <- lapply(CR_Date,as.POSIXct)
CR_Date
# pos1 pos2
#1 2014-07-01 2014-07-01 00:00:00
#2 2014-07-01 2014-07-01 10:15:00
CR_Date$pos2[2] - CR_Date$pos1[2]
#Time difference of 10.25 hours
CR_Date$hours <- CR_Date$pos2 - CR_Date$pos1
Lösung
Erstens hat das nichts mit Schmiermittel zu tun.
Zweitens hat RSTUDIO Sie durch Schrauben mit dem Drucken der Variablen im Anzeigefenster gelassen.Wenn Sie CR_Date$hours
in das Fenster "Befehlszeilen" eingeben, sehen Sie IT-Drucke
und head(CR_Date)
gibt:
von denen entweder Sie abgetippt hätten, was er zeigt.
AS @VICTORP schlägt vor, difftime
ist der Weg, um dies zu beheben:
Andere Tipps
Sie können auch das „as.double
Methode" und ihre units
Argument (vgl ?diffime
):
as.double
Methode [as.double(x, units = "auto", ...)
] gibt den numerischen Wert zurück, ausgedrückt in den angegebenen Einheiten
...Wo x
Ist
ein Objekt, das von der Klasse erbt
"difftime"
Auf Ihr Beispiel angewendet, wo pos2 - pos1
wird zu einem führen difftime
Objekt:
CR_Date$hours <- as.double(CR_Date$pos2 - CR_Date$pos1, units = "hours")
CR_Date
# pos1 pos2 hours
#1 2014-07-01 2014-07-01 00:00:00 0.00
#2 2014-07-01 2014-07-01 10:15:00 10.25
Oder andere units
:
as.double(CR_Date$pos2 - CR_Date$pos1, units = "mins")
#[1] 0 615
as.double(CR_Date$pos2 - CR_Date$pos1, units = "days")
#[1] 0.0000000 0.4270833