使用R按日期和时间选择5分钟的范围

使用R按日期和时间选择5分钟的范围,r,time-series,xts,quantitative-finance,hft,R,Time Series,Xts,Quantitative Finance,Hft,我有一个数据格式的时间序列 Ask Bid Trade Ask_Size Bid_Size Trade_Size 2016-11-01 01:00:03 NA 938.10 NA NA 203 NA 2016-11-01 01:00:04 NA 937.20 NA NA 100 NA 2016-11-01 01:00:04 938.0

我有一个数据格式的时间序列

                        Ask    Bid  Trade Ask_Size Bid_Size Trade_Size
2016-11-01 01:00:03     NA 938.10     NA       NA      203         NA
2016-11-01 01:00:04     NA 937.20     NA       NA      100         NA
2016-11-01 01:00:04 938.00     NA     NA       28       NA         NA
2016-11-01 01:00:04     NA 938.10     NA       NA      203         NA
2016-11-01 01:00:04 939.00     NA     NA       11       NA         NA
2016-11-01 01:00:05     NA 938.15     NA       NA       19         NA
2016-11-01 01:00:06     NA 937.20     NA       NA      100         NA
2016-11-01 01:00:06 938.00     NA     NA       28       NA         NA
2016-11-01 01:00:06     NA     NA 938.10       NA       NA         69
2016-11-01 01:00:06     NA     NA 938.10       NA       NA        831
2016-11-01 01:00:06     NA 938.10     NA       NA      134         NA
时间序列数据的结构如下所示:

str(df_ts)

An ‘xts’ object on 2016-11-01 01:00:03/2016-11-02 12:59:37 containing:
  Data: num [1:35797, 1:6] NA NA 938 NA 939 NA NA 938 NA NA ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:6] "Ask" "Bid" "Trade" "Ask_Size" ...
  Indexed by objects of class: [POSIXct,POSIXt] TZ: 
  xts Attributes:  
 NULL
如何创建5分钟时间序列数据的子集。开始时间和结束时间将由用户定义

样本数据可在以下网址找到:


请帮助

您可以使用润滑和应用功能。我假设您的时间戳(日期和时间)位于第一列,我将该列命名为“时间戳”。数据帧是df。首先安装润滑套件。 结果将存储在不同的数据帧df2中

library(lubridate)

# Round to 5 minutes
df$timestamp <- ceiling_date(as.POSIXct(df$timestamp), unit = "5 minutes")

# Create data frame to store results
df2 <- NULL
df2$timestamp <- levels(factor(df$timestamp))
df2 <- apply(df[,2:ncol(df)], 2, function(x)
             {
              df2 <<- cbind(df2, aggregate(x ~ df$timestamp, FUN = sum)[2])[[ncol(df)-2]]
             })
names(df2) <- names(df)
库(lubridate)
#大约5分钟

df$timestamp您可以使用lubridate和apply函数。我假设您的时间戳(日期和时间)位于第一列,我将该列命名为“时间戳”。数据帧是df。首先安装润滑套件。 结果将存储在不同的数据帧df2中

library(lubridate)

# Round to 5 minutes
df$timestamp <- ceiling_date(as.POSIXct(df$timestamp), unit = "5 minutes")

# Create data frame to store results
df2 <- NULL
df2$timestamp <- levels(factor(df$timestamp))
df2 <- apply(df[,2:ncol(df)], 2, function(x)
             {
              df2 <<- cbind(df2, aggregate(x ~ df$timestamp, FUN = sum)[2])[[ncol(df)-2]]
             })
names(df2) <- names(df)
库(lubridate)
#大约5分钟
df$timestamp在XTS包中有一个
to.minutes(x,k)
方法。然而,我已经从github安装了这个版本,它领先于CRAN。所以我不完全确定CRAN版本是否有。甚至还有一个
to.minutes5()
在XTS包中有一个
to.minutes(x,k)
方法。然而,我已经从github安装了这个版本,它领先于CRAN。所以我不完全确定CRAN版本是否有。甚至还有一个
to.minutes5()