2016-10-04 4 views
1

ich einen R Datenrahmen haben, df, wie folgt aus:R aggregierte Daten in rund 10 Minuten

WIFIAPTag   passengerCount  timeStamp   MAC 
1 E1-1A-1<E1-1-01>  15  2016-09-10 18:55:04 5869.6c54.d040 
750 E1-1A-1<E1-1-01>  14  2016-09-10 18:56:01 5869.6c54.d040 
1499 E1-1A-1<E1-1-01>  18  2016-09-10 18:57:01 5869.6c54.d040 
2248 E1-1A-1<E1-1-01>  17  2016-09-10 18:58:02 5869.6c54.d040 
2997 E1-1A-1<E1-1-01>  17  2016-09-10 18:59:01 5869.6c54.d040 
3746 E1-1A-1<E1-1-01>  14  2016-09-10 19:00:01 5869.6c54.d040 
3746 E1-1A-1<E1-1-01>  1  2016-09-10 19:05:01 5869.6c54.d040 

Jetzt habe ich diese Datenrahmen alle 10 Minuten aggregieren möchten, wie folgt aus:

WIFIAPTag   passengerCount  timeStamp   MAC 
1 E1-1A-1<E1-1-01>  81  2016-09-10 18:50:00 5869.6c54.d040 
2 E1-1A-1<E1-1-01>  15  2016-09-10 19:00:00 5869.6c54.d040 

I mit aggregate und cut in R wie folgt aus:

output <- aggregate(passengerCount ~ cut(timeStamp, breaks = "10 mins"), df, sum) 

Aber ich kann nur erhalten die Daten ab 2016-09-10 18:55:00:

output 
    WIFIAPTag   timeStamp passengerCount 
1 E1-1A-1<E1-1-01> 2016-09-10 18:55:00    95 
2 E1-1A-1<E1-1-01> 2016-09-10 19:05:00    1 

Wie kann ich die Ausgabe Start von 2016-09-10 18:50:00 machen?

+1

wenn Sie bricht einen Wert wie '„10 Minuten“geben' es wird das Intervall in das unter Verwendung des ersten und des letzten Datums partitionieren. Wählen Sie stattdessen explizit Ihre Pausen: 'seq.POSIXt (as.POSIXct ('2016-09-10 18:50:00'), as.POSIXct ('2016-09-10 23:50:00'), von = 600) 'zum Beispiel – Shape

+0

Es hat funktioniert! Wie wäre es mit der Antwort unten, damit ich es akzeptieren kann? – jjdblast

Antwort

2

Wenn Sie einen Wert für Pausen wie "10 Minuten" eingeben, wird das Intervall mit dem ersten und letzten Datum mit 10-Minuten-Segmenten unterteilt.

Stattdessen wählen Sie Ihre Pausen ausdrücklich:

(mit lubridate, da ich nicht lieber den niedrigsten und höchsten Werte codieren)

library(lubridate) 

lowtime <- min(df$timeStamp) 
hightime <- max(df$timeStamp) 

# Set the minute and second to the nearest 10 minute value 
minute(lowtime) <- floor(minute(lowtime)/10) * 10 
minute(hightime) <- ceiling(minute(hightime)/10) * 10 
second(lowtime) <- 0 
second(hightime) <- 0 

# Set the breakpoints at 10 minute intervals 
breakpoints <- seq.POSIXt(lowtime, hightime, by = 600) 
output <- aggregate(passengerCount ~ cut(timeStamp, breaks = breakpoints), df, sum) 
Verwandte Themen