R XTS包to.minutes - 无法从5米正确创建15米和30米时间序列

时间:2014-07-30 20:40:43

标签: r xts

我正在尝试使用R XTS包来。分钟从5米创建15米和30米的时间序列。我有一个xts对象,这是日期时间,然后是OHLC。有关xts对象x的信息如下:

head(x)显示以下内容:

                   High    Low   Open  Close Volume

2010-05-03 09:00:00 106.08 105.95 106.06 106.00 1055 2010-05-03 09:05:00 106.03 105.75 106.00 105.77 4369 2010-05-03 09:10:00 105.77 105.59 105.77 105.68 4125 2010-05-03 09:15:00 105.84 105.66 105.69 105.80 2457 2010-05-03 09:20:00 105.89 105.71 105.80 105.83 1788 2010-05-03 09:25:00 105.89 105.78 105.84 105.78 977

str(x)显示以下内容:

> str(x)

‘zoo’ series from 2010-05-03 09:00:00 to 2013-06-10 14:30:00 Data: num [1:222473, 1:5] 106 106 106 106 106 ... - attr(*, "dimnames")=List of 2 ..$ : NULL ..$ : chr [1:5] "High" "Low" "Open" "Close" ... Index: POSIXct[1:222473], format: "2010-05-03 09:00:00" "2010-05-03 09:05:00" "2010-05-03 09:10:00" ...

str(head(index(x)))显示以下内容:

head(str(index(x)))

POSIXct[1:222473], format: "2010-05-03 09:00:00" "2010-05-03 09:05:00" "2010-05-03 09:10:00" ... NULL

当我将时间序列转换为15米时,系列会在09:10:00开始,然后是15分钟的增量,而不是从09:15:00开始,然后是15分钟的增量

> head(to.minutes(x, k=15))

                  x.Open x.High  x.Low x.Close x.Volume

2010-05-03 09:10:00 106.08 105.95 105.77 105.68 9549 2010-05-03 09:25:00 105.84 105.78 105.69 105.78 5222 2010-05-03 09:40:00 105.80 105.92 105.62 106.12 9727 2010-05-03 09:55:00 106.17 106.00 106.01 106.22 6320 2010-05-03 10:10:00 106.26 106.07 106.15 106.14 8422 2010-05-03 10:25:00 106.57 106.38 106.15 106.37 10422

当我将时间序列转换为30米时,同样的问题,系列从09:25:00开始,接着是30分钟的增量,而不是从09:30:00开始,接着是30分钟的增量

> head(to.minutes(x, k=30))
                  x.Open x.High  x.Low x.Close x.Volume

2010-05-03 09:25:00 106.08 105.95 105.69 105.78 14771 2010-05-03 09:55:00 105.80 106.00 105.62 106.22 16047 2010-05-03 10:25:00 106.26 106.38 106.15 106.37 18844 2010-05-03 10:55:00 106.37 106.27 106.01 106.00 17193 2010-05-03 11:25:00 106.04 106.20 105.95 106.29 9075 2010-05-03 11:55:00 106.34 106.35 106.24 106.39 8517

我也尝试过使用1分钟数据并遇到同样的问题。有什么可能导致这个问题以及如何解决它?感谢

1 个答案:

答案 0 :(得分:4)

?to.minutes帮助页面上已经清楚地描述了这一点。默认情况下,组在数据末尾开始并向后工作,因此不必注意第一个值是什么。但是,您可以明确地将indexAt=参数设置为"startof"。例如

x <- zoo(runif(25), order.by=seq(as.POSIXct("2010-05-03 09:00:00"), 
    as.POSIXct("2010-05-03 11:00:00"), by="5 min"))

to.minutes15(x)

#                         x.Open    x.High      x.Low    x.Close
# 2010-05-03 09:10:00 0.35570172 0.3557017 0.04524480 0.04524480
# 2010-05-03 09:25:00 0.78939084 0.7893908 0.44032175 0.44032175
# 2010-05-03 09:40:00 0.05272398 0.5381755 0.05272398 0.53817548
# 2010-05-03 09:55:00 0.02198503 0.1113298 0.02198503 0.11132980
# 2010-05-03 10:10:00 0.78785210 0.8804505 0.04152860 0.04152860
# 2010-05-03 10:25:00 0.79317091 0.9497044 0.54751546 0.94970444
# 2010-05-03 10:40:00 0.03886176 0.7425681 0.03886176 0.06614893
# 2010-05-03 10:55:00 0.58684500 0.5868450 0.02794687 0.14291696
# 2010-05-03 11:00:00 0.11713868 0.1171387 0.11713868 0.11713868

to.minutes15(x, indexAt="startof")

#                         x.Open    x.High      x.Low    x.Close
# 2010-05-03 09:00:00 0.35570172 0.3557017 0.04524480 0.04524480
# 2010-05-03 09:15:00 0.78939084 0.7893908 0.44032175 0.44032175
# 2010-05-03 09:30:00 0.05272398 0.5381755 0.05272398 0.53817548
# 2010-05-03 09:45:00 0.02198503 0.1113298 0.02198503 0.11132980
# 2010-05-03 10:00:00 0.78785210 0.8804505 0.04152860 0.04152860
# 2010-05-03 10:15:00 0.79317091 0.9497044 0.54751546 0.94970444
# 2010-05-03 10:30:00 0.03886176 0.7425681 0.03886176 0.06614893
# 2010-05-03 10:45:00 0.58684500 0.5868450 0.02794687 0.14291696
# 2010-05-03 11:00:00 0.11713868 0.1171387 0.11713868 0.11713868