2016-12-12 6 views
1

Ich arbeite in R. Mein Datensatz hat eine Spalte von Zeiten (hh: mm: ss). Die Spalte wird als Faktoren aufgeführt.Uhrzeit Umwandlung in numerische und Mutation in R

Letztendlich möchte ich in der Lage sein, das diff() zwischen den Werten in dieser Spalte zu erhalten (also die Differenz zwischen time1 und time2 in der gleichen Spalte). Das kann ich nicht mit Faktoren machen.

Wie würde ich die Zeiten in ein anderes Formular umwandeln, mit dem ich den Zeitunterschied innerhalb derselben Spalte berechnen kann? Jede Hilfe würde wirklich geschätzt werden !!

+1

Sie können 'hms()' 'von lubridate' und dann' difftime() '. – CephBirk

+0

Probieren Sie die "Times" -Funktion aus dem "chron" -Paket. Sie sollten es bereits installiert haben. –

+0

Wenn ich folgendes benutze: test <- hms (my_df $ time, leise = FALSE, roll = FALSE), dann bekomme ich die Uhrzeit Stunden, Minuten und Sekunden. difftime() ist keine Funktion in lubridate, meinst du eine andere Funktion? ..... Was den zweiten Kommentar betrifft, kann ich auch nicht die "Zeit" -Funktion in den Chron-Paketdetails finden .... Danke! – Katie

Antwort

-1

nehmen, was Sie vorgeschlagen haben:

x <- factor(c("12:34:56", "12:35:45", "12:48:00")) 
y <- factor(c("12:42:56", "13:22:41", "17:11:21")) 

## convert to time 
x <- strptime(x, format = "%H:%M:%S") 
y <- strptime(y, format = "%H:%M:%S") 

## now you want a vector of differences 
difftime(y,x, units="hours") 
Time differences in hours 
[1] 0.1333333 0.7822222 4.3891667 

Edit: ich Ihre Frage falsch verstanden. Sie wollen Unterschiede innerhalb einer Spalte. Denken Sie daran, dass Sie am Ende die fencepost problem haben werden, weil Ihre Ausgabe eine weniger Zeilen als Ihre Spalte hat. Versuchen

diff.difftime(x) 
Time differences in seconds 
[1] 49 735 
+0

Hallo und vielen Dank für Ihre Hilfe. Nachdem ich diesen Code benutzt habe (was ich für erfolgreich hielt), merke ich, dass sich mit hms() die Zeit ändert. Wenn ich zum Beispiel meine Daten $ time einlade, bevor ich sie durch hms() laufe, ist die erste zurückgegebene Zeit: 08: 08: 48.63. Wenn ich den gleichen Vektor durch hms() laufen lasse, gibt es 11H 18M 48.63S zurück. Ändert ein Charakter zu einer Periode die Zeit in irgendeiner Weise? Jede Hilfe oder Unterstützung würde sehr geschätzt werden! – Katie

0

diesen Code versuchen:

library(lubridate) 
library(dplyr) 

id <- c(1,2,3,4) 
time1 <- hms(factor(c("09:00:01","04:02:50","10:30:21","11:15:25"))) 
time2 <- hms(factor(c("00:00:01","01:02:00","09:30:11","14:15:25"))) 

df<-data.frame(id, time1, time2) 

df %>% 
group_by(id) %>% 
summarize(t_diff = time1 - time2) 

    t_diff 
1 9H 0M 0S 
2 3H 0M 50S 
3 1H 0M 10S 
4 -3H 0M 0S 
Verwandte Themen