2016-11-26 56 views
1

我有格式的時間序列數據選擇範圍爲5分鐘按日期和時間的,使用R

     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分鐘。開始時間和結束時間將是用戶定義的

樣本數據可以在

https://www.dropbox.com/s/m94y6pbhjlkny1l/Sample_HFT.csv?dl=0

找到請幫助

+1

在XTS包中有'to.minutes(x,k)'方法。不過,我已經安裝了github的版本,這比CRAN早了一些。所以我不完全確定CRAN版本有它。甚至有'to.minutes5()' –

回答

0

您可以使用lubridate和應用功能。我假設你的時間戳(日期和時間)在第一列,並且我有名稱列爲「時間戳」。數據幀是df。首先安裝lubridate包。 結果將存儲在不同的數據幀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)