R 在 10 分钟内聚合数据
R aggregate data in round 10 minutes
我有一个 R 数据框,df
,像这样:
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
现在我想每 10 分钟聚合一次此数据帧,如下所示:
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
我在 R 中使用 aggregate
和 cut
是这样的:
output <- aggregate(passengerCount ~ cut(timeStamp, breaks = "10 mins"), df, sum)
但是我只能从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
如何让输出从 2016-09-10 18:50:00
开始?
为休息时间指定一个值(如“10 分钟”)将使用第一个和最后一个日期以 10 分钟为间隔来划分间隔。
相反,明确选择休息时间:
(使用 lubridate,因为我不喜欢对最低值和最高值进行硬编码)
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)
我有一个 R 数据框,df
,像这样:
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
现在我想每 10 分钟聚合一次此数据帧,如下所示:
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
我在 R 中使用 aggregate
和 cut
是这样的:
output <- aggregate(passengerCount ~ cut(timeStamp, breaks = "10 mins"), df, sum)
但是我只能从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
如何让输出从 2016-09-10 18:50:00
开始?
为休息时间指定一个值(如“10 分钟”)将使用第一个和最后一个日期以 10 分钟为间隔来划分间隔。
相反,明确选择休息时间:
(使用 lubridate,因为我不喜欢对最低值和最高值进行硬编码)
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)