将时间戳转换为R中的频率分级时间序列?

时间:2018-01-08 05:47:48

标签: r time-series aggregation

我根据对特定服务的请求选择了分散的时间戳数据。此数据涵盖了针对此服务的大约3。5 - 4年的请求。

我希望将这个可变间隔时间戳的选择转换为R中的频率分级时间序列。

我如何将这些时间戳转换为频率分级时间序列,例如“当天下午1点到1点15分之间,有7个请求,下午1点15分到1点30分之间有2个,在1:30到1:45之间,有0“,肯定还有一个没有任何东西的垃圾箱?

数据只是来自数据库转储的时间戳的向量,所有格式都是:“”2014-02-17 13:10:46“。只是一个大的ol'向量,其中有大约200万个对象。< / p>

1 个答案:

答案 0 :(得分:1)

您可以使用工具处理来自xtszoo的时间序列数据。请注意,您需要一些人为的“数据”:

library(xts)
set.seed(42)
ts.index <- ISOdatetime(2018, 1, 8, 8:9, sample(60, 10), 0)
ts <- xts(rep(1, length(ts.index)), ts.index)
aggregate(ts, time(ts) - as.numeric(time(ts)) %% 900, length, regular = TRUE)
#>                      
#> 2018-01-08 08:15:00 1
#> 2018-01-08 08:30:00 3
#> 2018-01-08 08:45:00 1
#> 2018-01-08 09:00:00 1
#> 2018-01-08 09:15:00 1
#> 2018-01-08 09:45:00 3

修改:如果您想要包含没有观察的分档,可以转换为严格定期的ts对象,并将插入的NA值替换为零:

raw <- aggregate(ts, time(ts) - as.numeric(time(ts)) %% 900, length, regular = TRUE)
as.xts(na.fill(as.ts(raw), 0), dateFormat = "POSIXct")
#>                     zoo(coredata(x), tt)
#> 2018-01-08 08:15:00                    1
#> 2018-01-08 08:30:00                    3
#> 2018-01-08 08:45:00                    1
#> 2018-01-08 09:00:00                    1
#> 2018-01-08 09:15:00                    1
#> 2018-01-08 09:30:00                    0
#> 2018-01-08 09:45:00                    3

编辑2:它也适用于提供的示例数据:

library(xts)
data <- c(1228917812, 1245038910, 1245986979, 1268750482, 1281615510, 1292561113)
class(data) = c("POSIXct", "POSIXt")
attr(data, "tzone") <- "UTC"
dput(data)
#> structure(c(1228917812, 1245038910, 1245986979, 1268750482, 1281615510, 
#> 1292561113), class = c("POSIXct", "POSIXt"), tzone = "UTC")
ts <- xts(rep(1, length(data)), data)
raw <- aggregate(ts, time(ts) - as.numeric(time(ts)) %% 900, length, regular = TRUE)
head(as.xts(na.fill(as.ts(raw), 0), dateFormat = "POSIXct"))
#>                     zoo(coredata(x), tt)
#> 2008-12-10 15:00:00                    1
#> 2008-12-10 15:15:00                    0
#> 2008-12-10 15:30:00                    0
#> 2008-12-10 15:45:00                    0
#> 2008-12-10 16:00:00                    0
#> 2008-12-10 16:15:00                    0