【问题标题】:R aggregate data in round 10 minutesR 在 10 分钟内聚合数据
【发布时间】:2017-02-13 02:04:34
【问题描述】:

我有一个 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 中使用 aggregatecut,如下所示:

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 开始?

【问题讨论】:

  • 如果你给 break 一个像 "10 mins" 这样的值,它将使用第一个和最后一个日期将间隔划分为那个。相反,请明确选择您的休息时间:例如seq.POSIXt(as.POSIXct('2016-09-10 18:50:00'),as.POSIXct('2016-09-10 23:50:00'),by = 600)
  • 成功了!在下面回答如何让我接受?

标签: r dataframe time-series dplyr data-processing


【解决方案1】:

为诸如“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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多