使用R将1分钟数据转换为5分钟

时间:2014-02-17 05:26:58

标签: r

我正在尝试使用PROXISct在R中将1分钟数据转换为5分钟。但我无法转换它。 我的数据采用这种格式。

       Date   Time   Price   Volume    No.of.trades
1  01-06-2012 09:15 4901.895 283550         1286
2  01-06-2012 09:16 4907.046 140000          831
3  01-06-2012 09:17 4904.140  96900          639
4  01-06-2012 09:18 4900.609  84350          553
5  01-06-2012 09:19 4900.067  76450          516
6  01-06-2012 09:20 4898.378  84900          551

dt_tm <- as.POSIXct(paste(x[,1], x[,2]),
                format="%d-%m-%Y %H:%M", tz="UTC")
cable <- xts(x[,3:5], order.by=dt_tm)

                    Price    Volume    No.of.trades     
2012-01-07 09:15:00 6054.890 139750          787
2012-01-07 09:16:00 6051.176  56550          335
2012-01-07 09:17:00 6045.232 127400          691
2012-01-07 09:18:00 6039.950  59950          374
2012-01-07 09:19:00 6042.292  55450          214
2012-01-07 09:20:00 6044.140  53600          246

在这一步之后我得到了一个不同类型的系列,这在我的数据中没有。 此外,我必须使用此代码将我的数据转换为5分钟,

colnames(cable)[1] <- "CLOSE"
trades5 <-to.minutes5(cable, indexAt='startof', name=NULL)

请纠正我的错误,并建议我是否有其他方式将此类数据转换为5分钟。

我仍然面临与数据相关的问题。我的数据中的data.date结构是日 - 月 - 年,你建议交换日和月,我做了同样的事情并得到了预期的结果但是在头脑中它很好但是当我在寻找尾巴时,我发现它有一些问题。尾巴是

Date        Time      Price     Volume    No.of.trades
91561 31-05-2013 15:25 6004.504  86550          622
91562 31-05-2013 15:26 6003.709 117750          651
91563 31-05-2013 15:27 6000.656 160950          856
91564 31-05-2013 15:28 5997.516 215950         1191
91565 31-05-2013 15:29 5995.305 303200         1784

现在使用以下代码

dt_tm <- as.POSIXct(paste(x[,1], x[,2]),
    format="%m-%d-%Y %H:%M", tz="UTC")
ct <- cut(dt_tm, breaks="5 mins")
ct_tm <- as.POSIXct(as.character(ct))
cable <- xts(x[,3:5], order.by=ct_tm)
head(cable)
                    Price         Volume          No.of.trades
2012-01-06 09:15:00 4901.895        283550         1286
2012-01-06 09:15:00 4907.046        140000         831
2012-01-06 09:15:00 4904.140        96900          639
2012-01-06 09:15:00 4900.609        84350          553
2012-01-06 09:15:00 4900.067        76450          516
2012-01-06 09:20:00 4898.378        84900          551

但是当我在找尾巴的时候     尾(电缆)

      Price         Volume          No.of.trades
<NA> 6004.504         86550           622
<NA> 6003.709         117750          651
<NA> 6000.656         160950          856
<NA> 5997.516         215950         1191
<NA> 5995.305         303200         1784
<NA> 5991.419         550            8

在我现在出错的地方帮助我。

1 个答案:

答案 0 :(得分:1)

我认为您可能错误地格式化数据 - 交换日期和月份。

dt_tm <- as.POSIXct(paste(x[,1], x[,2]),
            format="%m-%d-%Y %H:%M", tz="UTC")

转换为5分钟的数据框可以像这样实现:

# cut dt_tm to 5 minutes intervals
ct <- cut(dt_tm, breaks="5 mins")
# convert to POSIXct
ct_tm <- as.POSIXct(as.character(ct))
# aggregate
cable <- xts(x[,3:5], order.by=ct_tm)

                    Time    Price      Volume  
2012-01-06 09:15:00 "09:15" "4901.895" "283550"
2012-01-06 09:15:00 "09:16" "4907.046" "140000"
2012-01-06 09:15:00 "09:17" "4904.140" " 96900"
2012-01-06 09:15:00 "09:18" "4900.609" " 84350"
2012-01-06 09:15:00 "09:19" "4900.067" " 76450"
2012-01-06 09:20:00 "09:20" "4898.378" " 84900"