调用(xts)对象数据集变量的名称列表(字符串)

问题描述 投票:0回答:2

这可能是一个非常简单的问题,但我在互联网上找了几个小时,没有任何想法 - 这就是为什么我在这里问。

我有一个csv文件与股票符号(如DAI.F,PAH3.F,GRU.F,...)。使用软件包quantmod,我从雅虎获得历史股票数据,并为每个股票符号在我的工作区创建了一个与符号名称相同的xts-Object。

我的问题是,我不知道如何根据csv文件的内容循环浏览这些xts-objects。这些名称以字符串的形式存储在 symbols_watchlist

代码的最后一行是问题所在。stock <- symbols_watchlist[i]

stock 应该是xts -objects中的一个,在每个循环中被导入。有了 stock <- symbols_watchlist[i] 它只是变成了一个字符串,其中包含了从 symbols_watchlist - 请看附图(RStudio中的工作空间示例)。

library(quantmod)
library(tidyquant)
library(readr)

start_date_5year <- Sys.Date()-1826
end_date <- Sys.Date()

watchlist <-  read.csv("D:/Watchlist.csv", header = TRUE, sep = ";")
symbols_watchlist <- watchlist$Yahoo_label

getSymbols(watchlist$Yahoo_label,src='yahoo', from = start_date_5year, to = end_date) 

for (i in 1:length(symbols_watchlist)){
  stock <- symbols_watchlist[i]
}

RStudio中的工作空间示例

enter image description here

r string loops variables
2个回答
0
投票

你可以使用 mget 来获取列表中的所有符号。

list_of_symbols <- mget(symbols_watchlist)

然后您可以使用 lapply 来循环它们,并对它们中的每一个应用任何函数。

lapply(list_of_symbols, function(x) {
     #Do something with each symbol
})

使用 for 循环,你可以用 get.

for (i in symbols_watchlist) {
   stock <- get(i)
   #Do something with stock
}

1
投票

你必须决定你想要什么作为你的最终结果和哪个框架工作。你用的是tidyquant,但用的是 getSymbols 从quantmod获取数据。你可以得到一个xts对象的列表或者一个包含所有数据的data.frame。

使用quantmod(不需要tidyquant),得到一个xts对象的列表。

library(quantmod)

symbols_watchlist <- c("DAI.F", "GRU.F", "IQ8.F", "PAH3.F")
start_date_5year <- Sys.Date()-1826
end_date <- Sys.Date()

stocks <- lapply(symbols_watchlist, getSymbols, from = start_date_5year, to = end_date, auto.asssign = FALSE)
names(stocks) <- symbols_watchlist

使用tidyquant,得到一个data.frame。

library(tidyquant)

df_stocks <- tq_get(symbols_watchlist, from = start_date_5year, to = end_date)
© www.soinside.com 2019 - 2024. All rights reserved.