2013-12-21 137 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)