2

このページ(http://cfe.cboe.com/Products/historicalVIX.aspx)のすべてのCSVファイルをダウンロードして、VIX先物の過去の価格を取得しようとしています。これを行うために使用しているコードは次のとおりです。

library(XML)

#Extract all links for url
url <- "http://cfe.cboe.com/Products/historicalVIX.aspx"
doc <- htmlParse(url)
links <- xpathSApply(doc, "//a/@href")
free(doc)

#Filter out URLs ending with csv and complete the link.
links <- links[substr(links, nchar(links) - 2, nchar(links)) == "csv"]
links <- paste("http://cfe.cboe.com", links, sep="")

#Peform read.csv on each url in links, skipping the first two URLs as they are not relevant.
c <- lapply(links[-(1:2)], read.csv, header = TRUE)

エラーが発生します:

Error in read.table(file = file, header = header, sep = sep, quote = quote,  : 
  more columns than column names

さらに調べてみると、これは一部のCSVファイルの形式が異なるためであることがわかりました。URLlinks[9]を手動でロードすると、最初の行に次の免責事項があることがわかります。

CFE data is compiled for the .......use of CFE data is subject to the Terms and Conditions of CBOE's Websites.

他のほとんどのファイル(例links[8]links[10])は問題ないので、これはランダムに挿入されているようです。これを処理するために実行できるRマジックはありますか?

ありがとうございました。

4

1 に答える 1

4

qmaoパッケージ(quantmodパッケージの関数用)に、これをはるかに簡単にするgetSymbols.cfeメソッドがあります。getSymbols

#install.packages('qmao', repos='http://r-forge.r-project.org')
library(qmao)

これはの例のセクションからのものです?getSymbols.cfe(関数にはデフォルトとは異なる引数がいくつかあるため、ヘルプページをお読みください)

getSymbols(c("VX_U11", "VX_V11"),src='cfe') 
#all contracts expiring in 2010 and 2011.
getSymbols("VX",Months=1:12,Years=2010:2011,src='cfe')
#getSymbols("VX",Months=1:12,Years=10:11,src='cfe') #same

そしてそれはVIXだけのものではありません

getSymbols(c("VM","GV"),src='cfe') #The mini-VIX and Gold vol contracts expiring this month

に慣れていない場合はgetSymbols、デフォルトでデータ.GlobalEnvがに保存され、保存されたオブジェクトの名前が返されます。

> getSymbols("VX_Z12", src='cfe')
[1] "VX_Z12"

> tail(VX_Z12)
           VX_Z12.Open VX_Z12.High VX_Z12.Low VX_Z12.Close VX_Z12.Settle VX_Z12.Change VX_Z12.Volume VX_Z12.EFP VX_Z12.OpInt
2012-10-26       19.20       19.35      18.62        18.87          18.9           0.0         22043         15        71114
2012-10-31       18.55       19.50      18.51        19.46          19.5           0.6         46405        319        89674
2012-11-01       19.35       19.35      17.75        17.87          17.9          -1.6         40609       2046        95720
2012-11-02       17.90       18.65      17.55        18.57          18.6           0.7         42592       1155       100691
2012-11-05       18.60       20.15      18.43        18.86          18.9           0.3         28136        110       102746
2012-11-06       18.70       18.85      17.75        18.06          18.1          -0.8         35599        851       110638

編集

私はあなたの質問に答えなかったが、同じエラーを取得する別の方法をあなたに示したことがわかりました!コードを機能させる簡単な方法は、最初の行に免責事項が含まれているかどうかを確認するためread.csvに使用するラッパーを作成することです。readLines含まれている場合は、最初の行をスキップします。それ以外の場合はread.csv、通常どおりに使用します。

myRead.csv <- function(x, ...) {  
  if (grepl("Terms and Conditions", readLines(x, 1))) { #is the first row the disclaimer?
    read.csv(x, skip=1, ...)  
  } else read.csv(x, ...)
}
L <- lapply(links[-(1:2)], myRead.csv, header = TRUE)

また、そのパッチをに適​​用しましたgetSymbols.cfe。svn checkoutを使用してqmao(1.3.11)の最新バージョンを入手できます(ヘルプが必要な場合はこの投稿を参照してください)。または、R-Forgeがビルドするまで待つことができます。数日まで。

于 2012-11-08T04:04:24.570 に答える