我想使用quantmod从中国股票清单中获取一些数据。
列表如下:
002705.SZ -- 002730.SZ
(在这个序列中,有一些代码与Null股票匹配,例如,没有股票称为002720.SZ)
300357.SZ -- 300402.SZ
603188.SS
603609.SS
603288.SS
603306.SS
603369.SS
我想编写一个循环来运行所有这些股票以获取每个股票的数据,并将它们保存到一个数据框中。
答案 0 :(得分:0)
这应该让你开始。
library(quantmod)
library(stringr) # for str_pad
stocks <- paste(str_pad(2705:2730,width=6,side="left",pad="0"),"SZ",sep=".")
get.stock <- function(s) {
s <- try(Cl(getSymbols(s,auto.assign=FALSE)),silent=T)
if (class(s)=="xts") return(s)
return (NULL)
}
result <- do.call(cbind,lapply(stocks,get.stock))
head(result)
# X002705.SZ.Close X002706.SZ.Close X002707.SZ.Close X002708.SZ.Close X002709.SZ.Close X002711.SZ.Close X002712.SZ.Close X002713.SZ.Close
# 2014-01-21 15.25 27.79 NA 17.26 NA NA NA NA
# 2014-01-22 14.28 28.41 NA 16.56 NA NA NA NA
# 2014-01-23 13.65 27.78 33.62 15.95 19.83 NA 36.58 NA
# 2014-01-24 15.02 30.56 36.98 17.55 21.81 NA 40.24 NA
# 2014-01-27 14.43 31.26 40.68 18.70 23.99 26.34 44.26 NA
# 2014-01-28 14.18 30.01 44.75 17.66 25.57 28.97 48.69 NA
这利用了getSymbols(...)
返回xts
对象或带有错误消息的字符串(如果提取失败)这一事实。
请注意,cbind(...)
个对象的xts
根据索引排列,因此其行为类似于merge(...)
。
这会生成xts
个对象,而不是数据框。要将其转换为data.frame,请使用:
result.df <- data.frame(date=index(result),result)