【问题标题】:Create xts index with both date & time使用日期和时间创建 xts 索引
【发布时间】:2014-01-31 18:20:23
【问题描述】:

我想通过我编写的 R 程序运行从交易应用程序获得的一些 1 分钟数据。到目前为止,我所有的 xts 对象都是来自 Yahoo 等的每日柱形图。如何创建 xts 索引的时间部分?请注意,日期和时间位于前 2 列中。有可能会丢失日期,几乎可以保证会丢失分钟。不应该有任何重复。 (我会自己检查)

谢谢

library(timeDate)

TestData = structure(list(X = 1:6, Date = structure(c(1L, 1L, 1L, 1L, 1L, 
                          1L), .Label = "07/01/1998", class = "factor"), Time = structure(1:6, .Label = c("06:31", 
                          "06:34", "06:35", "06:36", "06:38", "06:39"), class = "factor"), 
                          Open = c(114.06, 114.11, 114.06, 114.09, 114.09, 114.06), 
                          High = c(114.06, 114.13, 114.13, 114.09, 114.09, 114.13), 
                          Low = c(114, 114.06, 114.06, 114.03, 114.06, 114.06), Close = c(114, 
                          114.06, 114.13, 114.03, 114.06, 114.13), Volume = c(257600L, 
                          24400L, 2500L, 900L, 3000L, 16700L)), .Names = c("X", "Date", 
                          "Time", "Open", "High", "Low", "Close", "Volume"), class = "data.frame", row.names = c(NA, 
                          -6L))


MyDates = as.Date(TestData$Date,format = "%m/%d/%Y")
MyTimes = as.vector(TestData$Time)

MyIndexes = timeDate(paste(MyDates, MyTimes), format = "%Y-%m-%d %H:%M", zone="UTC")

NewData = xts(TestData[,3:7], order.by = MyIndexes)

is.xts(NewData)

【问题讨论】:

  • 这在help(DateTimeClasses)中有解释。
  • 谢谢德克。我现在可以使用 timeDate 包和上面的编辑代码。干杯!
  • 您是否知道有问题的软件包 xts 具有大量文档?
  • 当然。但是我没有找到如何做到这一点的例子,所以我去了其他地方。这是我第一次使用分钟来处理数据。

标签: r xts zoo


【解决方案1】:

给你。

首先,您的数据。请注意,多余的第一列首先会抛出代码中使用的索引。不过很容易纠正。

R> TestData
  X       Date  Time   Open   High    Low  Close Volume
1 1 07/01/1998 06:31 114.06 114.06 114.00 114.00 257600
2 2 07/01/1998 06:34 114.11 114.13 114.06 114.06  24400
3 3 07/01/1998 06:35 114.06 114.13 114.06 114.13   2500
4 4 07/01/1998 06:36 114.09 114.09 114.03 114.03    900
5 5 07/01/1998 06:38 114.09 114.09 114.06 114.06   3000
6 6 07/01/1998 06:39 114.06 114.13 114.06 114.13  16700
R> 

更糟糕的是,您将日期和时间强制为因子类型。 不是一个好主意:

R> sapply(TestData, class)
        X      Date      Time      Open      High       Low     Close    Volume 
"integer"  "factor"  "factor" "numeric" "numeric" "numeric" "numeric" "integer" 
R> 

因此,当我们使用时,我们首先转换为字符,然后粘贴,然后解析,最后转换为as.POSIXct,这是xts 相当满意的类型。

R> x <- xts(TestData[,4:8],
+           order.by=as.POSIXct(strptime(paste(as.character(TestData[,2]),
+                                              as.character(TestData[,3])), 
+                                              "%m/%d/%Y %H:%M")))
R> 

瞧:

R> myxts
                      Open   High    Low  Close Volume
1998-07-01 06:31:00 114.06 114.06 114.00 114.00 257600
1998-07-01 06:34:00 114.11 114.13 114.06 114.06  24400
1998-07-01 06:35:00 114.06 114.13 114.06 114.13   2500
1998-07-01 06:36:00 114.09 114.09 114.03 114.03    900
1998-07-01 06:38:00 114.09 114.09 114.06 114.06   3000
1998-07-01 06:39:00 114.06 114.13 114.06 114.13  16700
R> 

但您确实应该花一些时间阅读xtszoo广泛文档。

【讨论】:

    猜你喜欢
    • 2017-08-13
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2015-02-21
    • 1970-01-01
    • 2015-12-08
    相关资源
    最近更新 更多