错误“索引向量具有不同的类别:数字日期”

时间:2011-09-14 03:48:56

标签: r

我正在尝试从以下网站实现以下代码:

library(quantmod)
library(tseries)
library(timeDate)

symbols <- read.csv("sp500.csv", header = F, stringsAsFactors = F)
nrStocks <- length(symbols[,1])

z <- zoo()
for (i in 1:nrStocks) {
  cat("Downloading ", i, " out of ", nrStocks , "\n")
  x <- get.hist.quote(instrument = symbols[i,], start = dateStart,
    quote = "AdjClose", retclass = "zoo", quiet = T)
  z <- merge(z, x)
}

但我收到错误消息:

Error in download.file(url, destfile, method = method, quiet = quiet) : 
  cannot open URL 'http://chart.yahoo.com/table.csv?s=MFE&a=0&b=01&c=2008&d=8&e=12&f=2011&g=d&q=q&y=0&z=MFE&x=.csv'
In addition: There were 50 or more warnings (use warnings() to see the first 50)

In merge.zoo(z, x) : Index vectors are of different classes: numeric Date

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

以下是可能出现的问题列表:

  • "sp500.csv":您需要从某个地方获取此文件。如果您从here获取此代码,那么一种可能性为this,但该列表已过期

  • z <- zoo():这将没有日期格式的索引,因此会导致合并警告,因此可能会明显地跟随index(z) <- as.Date(format(time(z)),tz="")

  • 之类的行
  • start = dateStart,:您尚未指定dateStart。如果您想要上个月左右,那么start = Sys.Date() - 30,之类的内容可能会起作用

  • 错误的自动收报机代码:错误消息显示您的列表包含MFE作为其中一个符号。 MFE是迈克菲公司,已被英特尔公司接管,因此不再有报价。

答案 1 :(得分:2)

  1. Wikipedia允许您为sp500.csv制作更准确的列表

  2. 雅虎日期存在问题

  3. 一个。当美国市场开放时,这将有效。

    湾当美国市场关闭时,这可能不会起作用

    get.hist.quote的完整参考可以在此处获取 http://rgm2.lab.nig.ac.jp/RGM2/func.php?rd_id=tseries:get.hist.quote, 它也没给我任何帮助, 之后我查看了市场开放时间以外的数据: 第一个下载的工具是MMM,前几行是在这里(当市场关闭时):

    :Date,Open,High,Low,Close,Volume,Adj Close
    2012-07-16,88.10,88.55,87.78,88.10,2120700,88.10
    2012-07-16,88.12,88.65,87.77,88.10,2848100,88.10
    2012-07-13,86.32,87.83,86.32,87.59,2599300,87.59
    

    前两行似乎相同。 对于另一种工具,在市场开放的同时(欧洲工具), 这不是问题。

    x <- get.hist.quote(instrument = "^GDAXI", start = dateStart,
        quote = "AdjClose", retclass = "zoo", quiet = T)
    

    对于DAX,数据低于(现在是11H45 CET):

    Date,Open,High,Low,Close,Volume,Adj Close
    2012-07-17,6583.77,6610.26,6583.57,6593.82,000,6565.72
    2012-07-16,6550.95,6577.06,6511.18,6565.72,20388100,6565.72
    

    查看zoo.pdf手册(日期:2012年2月14日):

    他们建议通过添加一行解决此问题:

    x <- aggregate(x, identity, mean) # for an average
    

    x <- aggregate(x, identity, tail) # for the last observation
    

    尚未完成我的测试,但到目前为止这似乎没有警告和错误

答案 2 :(得分:0)

根据维基百科信息制作准确的S&amp; P500符号列表的代码:

library(XML)
library(RCurl)

url <- "https://en.wikipedia.org/wiki/List_of_S%26P_500_companies"
sp500html <- getURL(url)
sp500 <- readHTMLTable(sp500html, stringsAsFactors = F)[[1]][,1]