我有以下矢量:
USTickers=c("BAC","C","JPM","HBS","WFC","GS","MS","USB","BK","PNC")
实际上我的这个载体要长得多,但我只是把它缩短了。此向量具有股票的股票代码。
我使用quantmod从雅虎下载股票的数据。
由于我不打算为每个特定的股票代码编写函数,我想做一个循环。
首先,我想使用一个不是问题的函数getSymbols
。下载特定库存的对象。
但是我想对它进行一些调整并保存。然后我有一个问题(for循环中的第二行)。我想要一个变量名。将保存它的对象的名称必须更改。但我无法做到这一点。
for (i in 1:(length(USTickers))) {
getSymbols.yahoo(paste(USTickers[i]),.GlobalEnv,from=StrtDt,to=EndDt)
as.symbol(USTickers[i]=data.frame(time(get(USTickers[1])),get(USTickers[1])[,4],row.names=NULL)
}
瘾:
在我下载的股票的每个对象中,列名都采用此格式"AAL.Open"
,我想将其更改为"AAL"
。我该如何更改列名?
我知道可以使用colnames
功能完成,但我不知道如何自动执行操作。
导致第一部分" AAL"将不断变化,我只是想摆脱".Open"
部分。
基本上我可以用一个自动收录器名称重写它,但是当列名称发生变化时我不知道如何应用它,我打算用作向量USTickers
的参考。
答案 0 :(得分:0)
最好使用getSymbols函数关闭自动分配并将结果存储在列表中。以后可以轻松访问这些元素。请参阅下面的一些想法。
require(quantmod)
# Not going to loop through all
USTickers = c("BAC","C")#,"JPM","HBS","WFC","GS","MS","USB","BK","PNC")
# Initialise empty list
mysymbols <- vector("list", length(USTickers))
# Loop through symbols
for (i in 1:length(USTickers)) {
# Store in list
mysymbols[[i]] <- getSymbols.yahoo(paste(USTickers[i]),auto.assign = F)
# Isolate column of interest and date
mysymbols[[i]] <- data.frame(time(mysymbols[[i]]),
mysymbols[[i]][,4],
row.names = NULL)
# Change list elements name to symbol
names(mysymbols)[i] <- USTickers[i]
}
关于替换名称,可以使用可以应用于组合名称的gsub轻松完成。例如:
gsub(".Open", "", "AAL.Open")
但是,如果您只想将该列名称设为自动收报机,您也可以直接在循环中执行此操作colnames(mysymbols[[i]])[2] <- USTickers[i]