2017-01-24 4 views
1

Jede Hilfe wird groß sein.Wie berechnet man Zeitintervalle nach Datum?

Ich habe eine data.frame, die wie dieses aussieht:

Date  Time 
1 2015-06-30 14:30:00 
2 2015-06-30 14:35:00 
3 2015-06-30 14:40:00 
4 2015-07-03 00:25:00 
5 2015-07-03 03:27:00 

Und ich möchte eine neue Spalte hinzuzufügen. In dieser neuen Spalte würde jede Zeile den Zeitunterschied zwischen der aktuellen Zeile und der vorherigen Zeile unter Berücksichtigung des Datums aufweisen.

Ex:

Date  Time  Diff (min) 
1 2015-06-30 14:30:00 0  
2 2015-06-30 14:35:00 5 
3 2015-06-30 14:40:00 5 
4 2015-07-03 00:25:00 0 
5 2015-07-03 03:27:00 182 

Das Diff für die erste Zeile für jedes Datum sollte Null sein. Der Diff muss nicht in Minuten sein.

Alle Beispiele, die ich fand, verwendeten nicht den Zeilenansatz, um die Subtraktion durchzuführen.

Irgendwelche Ideen, wie ich das auf R tun könnte?

Vielen Dank im Voraus.

+0

Scheint ziemlich einfach. In eine datetime-Spalte umwandeln und dann 'ave' verwenden, um 'difftime' in jedem Datum separat anzuwenden. Sie sollten zeigen, wo Sie in diesem Prozess hängen bleiben. All diese Schritte wurden oft dargestellt und ich wäre überrascht, wenn es kein genaues Duplikat gäbe. –

+0

@rawr: würde paste0 nicht zum Zeichen zwingen, wenn sie etwas anderes wären? –

+0

@ 42- Ich würde den dput hinzufügen, so dass ich auf eine Antwort wartete – rawr

Antwort

0

Hier ist eine Schritt-für-Schritt-Lösung in einer mehr R wie durch Vermeidung von Schleifen. Die Kommentare im Code sollten die Logik erklären.

df<-read.table(header=TRUE, sep= " ", 
text= "Date Time 
2015-06-30 14:30:00 
2015-06-30 14:35:00 
2015-06-30 14:40:00 
2015-07-03 00:25:00 
2015-07-03 03:27:00") 

#find time difference 
delta<-diff(as.POSIXct(paste(df$Date, df$Time))) 

#determine if across different days by finding difference 
#if deltadays >0 then difference days and setting delta to 0 
delta[diff(as.Date(df$Date)) >0]<-0 

#add zero in front 
delta<-c(0, delta) 
#create desired dataframe 
df<-cbind(df, diff=delta) 

Da R nicht über eine Zeitobjekt (nur ein Datum oder Datetime-Objekte) braucht man die Datums- und Zeitspalten zu kombinieren, um die Unterschiede zu berechnen. Es gibt Möglichkeiten, ein Zeitobjekt in R zu verwenden, aber das würde das Hinzufügen zusätzlicher Pakete wie chron beinhalten, aber in diesem Fall ist es einfacher, das datetime -Objekt während der Berechnung zu erstellen.

Verwandte Themen