我正在尝试将数据框的列名更改为股票代码,因为我循环浏览股票代码列表并下载股票数据。
我有一个我读过的股票清单然后循环。在循环中,我下载了股票数据,设置了列名,然后与另一个数据框合并,但是当我打印这些名字时,数字被设置为列名而不是股票代码。
例如,在stocks.txt中,我有:
JCP
SVM
GSG
r代码如下:
options(digits=4, width=70)
library("zoo")
library(tseries)
# load the data into a zoo object using the zoo function read.csv
source(file="portfolio.r")
# Dowload the stock data of stocks listed in the stocks listing, such as stocks.txt
stocksymbols = read.table("stocks.txt",
sep="\t",
col.names=c("symbols"),
fill=FALSE,
strip.white=TRUE)
stocksymbols
prices <- get.hist.quote(instrument="^gspc", start="2013-01-01",
end="2013-12-21", quote="AdjClose",
provider="yahoo", origin="1970-01-01",
compression="d", retclass="zoo")
colnames(prices)[1] <- "GSPC"
for(i in 1:nrow(stocksymbols)) {
stocksymbol <- stocksymbols[i,]
con <- url("http://quote.yahoo.com")
if(!inherits(try(open(con), silent = TRUE), "try-error")) {
close(con)
x <- get.hist.quote(instrument=stocksymbol, start="2013-01-01",
end="2013-12-21", quote="AdjClose",
provider="yahoo", origin="1970-01-01",
compression="d", retclass="zoo")
colnames(x)[1] <- stocksymbol
prices <- merge(prices, x)
}
}
colnames(prices)
如何将列名更改为股票代码而不是数字。
答案 0 :(得分:1)
问题在于stocksymbols
是一个因素。如果您在stringsAsFactors=F
电话中添加read.table(...)
,则代码可以正常运行。
stocksymbols = read.table("~/stocks.txt",
sep="\t",
col.names=c("symbols"),
stringsAsFactors=F, # read as a character vector...
fill=FALSE,
strip.white=TRUE)