2013-12-21 139 views
0

我试图将数据框的列名更改为股票符号,因为我通过股票代码列表进行循环并下载股票数据。在循环中设置名称将名称设置为数字

我有一个我读过的股票列表,然后循环。在循环中,我下载股票数据,设置列名称,然后与另一个数据框合并,但是当我打印列名时,数字被设置为列名称而不是股票代码。

例如,在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) 

如何更改列名股票符号来代替数字。

+1

请提供一个最小*可重现的例子。 –

回答

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)