【问题标题】:read.zoo with date and time as index in Rread.zoo 以日期和时间作为 R 中的索引
【发布时间】:2013-01-10 20:33:34
【问题描述】:

我有以下文件

"Index" "time"  "open"  "high"  "low"   "close" "numEvents" "volume"
2013-01-09 14:30:00 "2013-01-09T14:30:00.000"   "110.8500"  "110.8500"  "110.8000"  "110.8000"  " 57"   "32059"
2013-01-09 14:31:00 "2013-01-09T14:31:00.000"   "110.7950"  "110.8140"  "110.7950"  "110.8140"  "  2"   " 1088"
2013-01-09 14:32:00 "2013-01-09T14:32:00.000"   "110.8290"  "110.8300"  "110.8290"  "110.8299"  "  5"   "  967"
2013-01-09 14:33:00 "2013-01-09T14:33:00.000"   "110.8268"  "110.8400"  "110.8268"  "110.8360"  "  8"   " 2834"
2013-01-09 14:34:00 "2013-01-09T14:34:00.000"   "110.8400"  "110.8400"  "110.8200"  "110.8200"  " 33"   " 6400"

我想将此文件读入 R 中的 zoo(或 xts)对象。此文件是作为 xts 对象创建的,并使用 write.zoo(as.zoo(xts_object), path, sep = "\t") 保存,现在我正在尝试使用 zoo_object <- read.zoo(path, sep = "\t", header=TRUE, format="%Y-%m-%d %H:%M:%S") 将其读取。但是,我收到以下警告

Warning message:
In zoo(rval3, ix) :
  some methods for “zoo” objects do not work if the index entries in ‘order.by’ are not unique

当我在控制台中输入zoo_object 以显示其内容时,我得到:

           time                    open     high    low      close    numEvents volume
2013-01-09 2013-01-09T14:30:00.000 110.8500 110.850 110.8000 110.8000 57        32059 
2013-01-09 2013-01-09T14:31:00.000 110.7950 110.814 110.7950 110.8140  2         1088 
2013-01-09 2013-01-09T14:32:00.000 110.8290 110.830 110.8290 110.8299  5          967 
2013-01-09 2013-01-09T14:33:00.000 110.8268 110.840 110.8268 110.8360  8         2834 
2013-01-09 2013-01-09T14:34:00.000 110.8400 110.840 110.8200 110.8200 33         6400

您可以在其中看到时间未包含在行索引中。我假设我可以将时间字段转换为索引并解决我的问题,但我也假设我在读取这个文件(或者可能是写入)时做错了,但是经过一整天的搜索,我不知道是什么。谁能提供任何见解?

dput(zoo_object)读后

dput(zoo_object)
structure(c("2013-01-09T14:30:00.000", "2013-01-09T14:31:00.000", 
"2013-01-09T14:32:00.000", "2013-01-09T14:33:00.000", "2013-01-09T14:34:00.000", 
"110.8500", "110.7950", "110.8290", "110.8268", "110.8400", "110.850", 
"110.814", "110.830", "110.840", "110.840", "110.8000", "110.7950", 
"110.8290", "110.8268", "110.8200", "110.8000", "110.8140", "110.8299", 
"110.8360", "110.8200", "57", " 2", " 5", " 8", "33", "32059", 
" 1088", "  967", " 2834", " 6400"), .Dim = c(5L, 7L), .Dimnames = list(
    NULL, c("time", "open", "high", "low", "close", "numEvents", 
    "volume")), index = structure(c(15714, 15714, 15714, 15714, 
 15714), class = "Date"), class = "zoo")

【问题讨论】:

  • read.zoo 没有用于多列值的 index.column 参数吗?从控制台测试构建动物园对象的 PITA 太过分了,所以无数次:为什么人们不学习使用 dput 发布示例?
  • 抱歉,我是 R 新手,正在努力学习。我不知道 dput 会有用。另外,我的问题是关于从文件到动物园对象的问题。当我把它读入电脑时,我已经错过了时间。我也不确定index.column 是什么,但我现在要去查一下。

标签: r xts zoo


【解决方案1】:

(请注意,测试所需的对象是传递给 write.zoo 的对象,而不是最终对象。)

默认情况下(看起来)read.zoo 使用的日期时间函数是as.Date,而我猜它会是as.POSIXct。您可以通过以下方式强制执行所需的行为:

zoo_object <- read.zoo("~/test", index.column=2, sep = "\t", 
                        header=TRUE, format="%Y-%m-%dT%H:%M:%S", FUN=as.POSIXct)

请注意,我稍微更改了您的格式,因为在编辑器中查看文本输出时,似乎是一列,其中“T”作为日期和时间文本之间的分隔符。

【讨论】:

  • 抱歉,我没有原始对象,也无法获取它,因为我无法从我的计算机访问它们的数据。 (那是一场完全不同的战斗,我正在战斗哈哈)。这就是为什么我正在处理我可以导入的文件。感谢您的帮助,我能够使用sym_xts &lt;- as.xts(read.zoo(path, sep = "\t", header=TRUE, FUN = function(x) as.POSIXct(strptime(x, format= "%Y-%m-%d %H:%M:%S")))) 来获取我的原始对象!!!谢谢。
  • 请注意,如果您不指定 FUN 参数,那么如果您指定时区,例如tz = "",然后它假定你想要 POSIXct,否则它假定 Date。
  • 太酷了sym_xts &lt;- as.xts(read.zoo(path, sep = "\t", header=TRUE, tz="GMT")) 似乎让我得到了同样的结果!!非常感谢。非常有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-07
  • 2018-01-24
  • 2011-02-18
  • 2015-10-20
相关资源
最近更新 更多