2016-07-28 5 views
2

Ich habe einen Datenrahmen mit zwei Zeitfelder. Ich versuche, zwischen diesen beiden Zeiten zu unterscheiden. Das Problem, dem ich gegenüberstehe, ist die Einheit der ersten Reihe, die in allen Reihen auf der ganzen Linie verwendet wird. Aber der Wert ist in einer anderen Einheit.Wie habe ich eine Difftime Spalte mit verschiedenen Einheiten in einem R Datenrahmen

Unten ist ein Beispiel:

myt < - strptime ("2016.07.15 07.51.33", „% m /% d /% Y% I:% M:% S% p ") - strptime (" 7/15/2016 7:51:32 AM ","% m /% d /% Y% I:% M:% S% p ")

myt [2 ] < - strptime ("7/15/2016 7:53:32 AM", "% m /% d /% J% I:% M:% S% p") - strptime ("7/15/2016 7 : 51: 32 AM“, "% m /% d /% Y% I:% m:% S% p")

myt

Zeitdifferenzen in Sekunden

[1] 1 2

myt [1]

Zeitdifferenz von 1 sec

myt [2]

Zeitdifferenz von 2 Sekunden

In diesem Fall ist die Antwort für Myt [2] 2 Minuten und nicht 2 Sekunden. Ist es möglich, 1. verschiedene Zeilen haben unterschiedliche Einheiten? 2. wenn nicht mindestens der richtige Wert für die angegebene Einheit (120 Sekunden in diesem Fall)

Bitte helfen.

Antwort

0

Wow. Ich wusste nicht, dass das passiert.

Eine mögliche Lösung könnte sein, difftime() zu verwenden und den Zeitunterschied "Einheit" anzugeben, den Sie möchten.

> myt <- difftime(strptime("7/15/2016 7:51:33 AM", "%m/%d/%Y %I:%M:%S %p"), 
        strptime("7/15/2016 7:51:32 AM", "%m/%d/%Y %I:%M:%S %p"), 
        units = "secs") 
> myt[2] <- difftime(strptime("7/15/2016 7:53:32 AM", "%m/%d/%Y %I:%M:%S %p"), 
        strptime("7/15/2016 7:51:32 AM", "%m/%d/%Y %I:%M:%S %p"), 
        units = "secs") 
> myt 
Time differences in secs 
[1] 1 120 

Vielen Dank, dass Sie darauf hingewiesen haben. Ich bin ziemlich Neuling mit Datetime/POSIXct Sachen und ich hätte das nicht realisiert

+1

Ich denke, ich weiß, warum es "falsch" zeigte. Als Myt erstellt wurde, wurde der Vektor initialisiert, um das Attribut "secs" zu haben; Das Hinzufügen von Elementen zu dem Vektor ändert nicht die Einheit (d. h. nur die numerische Lösung für die Zeitdifferenz wird hinzugefügt?). – carlo

+0

Danke Carlo. Ich habe Ihren Ansatz verwendet und die gesamte Spalte in Sekunden umgewandelt und kann sie später auf Zeilenebene konvertieren, wenn ich sie brauche. – Sai

+0

@Sai, gut zu wissen, dass es für Sie funktioniert. Alles Gute für alles was du tust! – carlo

0

Könnten Sie mehrere Spalten verwenden oder funktioniert das nicht für Ihr Problem? Wenn es funktioniert:

myt <- data.frame(strptime("7/15/2016 7:51:33 AM", "%m/%d/%Y %I:%M:%S %p") - strptime("7/15/2016 7:51:32 AM", "%m/%d/%Y %I:%M:%S %p")) 
myt[,2] <- strptime("7/15/2016 7:53:32 AM", "%m/%d/%Y %I:%M:%S %p") - strptime("7/15/2016 7:51:32 AM", "%m/%d/%Y %I:%M:%S %p") 
colnames(myt) <- c("time1","time2") 
myt 
+0

Danke Phil. In meinem Fall habe ich es mit einem großen Datensatz zu tun und die Verwendung mehrerer Spalten würde nicht funktionieren. – Sai

Verwandte Themen