【问题标题】:How can I make a loop with tickers created in Excel in R?如何使用 R 中在 Excel 中创建的代码进行循环?
【发布时间】:2020-12-14 03:15:37
【问题描述】:

我正在尝试使用我在 Excel 中创建的代码在 R 中创建一个循环。 我正在尝试从 Yahoo Finance 收集股票数据,想法是 R 将从 Excel 文件中读取股票名称,然后从 Yahoo Finance 收集并创建图表。

在数据框“Stocks”中,不同列中列出了 10 只不同的股票,我想运行一个循环,以便获得 10 个不同的图表。这是我用来从数据集中的第一只股票创建图表的公式。

 `Stocks %>%
ggplot(aes(x=Date, y = NOVO.B.CO.Close)) + 
geom_line(col = "darkgreen") + 
geom_point(col = "darkgreen") +
theme_gray() + 
ggtitle("Novo Nordiske B") `

【问题讨论】:

  • 很多问题都回答了这个问题。用于导入数据from excel。直接从yahoo in R 下载数据。要绘制多个证券,请创建一个 data.frameticker close 等,并使用 tickerggplot(data = df, aes(x = time, y = close, col = ticker)) + geom_line() + geom_point() + theme_gray() 着色。
  • 不确定我是否理解您的回复。我已经导入了excel表格,我需要的所有数据都在数据框“Stocks”下。我知道如何从雅虎下载数据,因为我已经能够创建一个包含过去 7 天收盘价的图表。问题只是创建一个for循环,所以我不需要将相同的公式输入10次。
  • 啊,我有点误解了你的问题。将数据以long 格式用于ggplot 通常是有益的,因为在aes 中使用col = column 将自动处理着色或使用facet_wrap/facet_grid 可以帮助将绘图拆分为子绘图。对于单个地块的自动化过程,您可能会从问题和我对this question 的回答中得到一些启发,这给出了一个有点简单的解决方案。
  • 对于单个图:base_plot <- ggplot(Stocks, aes(x = Date)) + theme_gray(); for(i in seq_along(tickers))base_plot <- base_plot + geom_line(aes_string(x = tickers[i]), col = colors[i]) + geom_point(aes_string(x = tickers[i]), col = colors[i]) 其中ticker 是列名,colors 是颜色向量。对于多个图,创建一个列表并将每个图存储到一个向量中,并在上面链接的问题中使用我的答案。

标签: r excel for-loop yahoo-finance stock-data


【解决方案1】:

将我的 cmets 包装成正确的答案。目前尚不清楚您是想将其设为单个图(使用facet_wrap)还是将多个图组合到一个窗口中。使用ggplot2 时,在long format 中使用单个data.frame 是有益的,因为可以让ggplot 基于类似于下面示例的分组列处理所有着色和分组

library(ggplot2)
data(mtcars)
ggplot(mtcars, aes(x = mpg, y = hp, col = factor(cyl))) + 
  geom_point() + 
  geom_smooth() + 
  labs(col = 'Nmb. Cylinder') 

从这里指南给出了每种颜色的名称,scale_*_(manual/discrete/continuous) 可用于更改特定的调色板(例如,scale_colour_discrete 可用于更改因子的调色板)。

在组合 ggplots 时,patchwork 包提供了简单的界面。如果我们假设您分别有一个向量 tickerstitlescolors,我们可以创建一个绘图列表并使用简单的加法 (+) 将它们组合起来。

library(purrr)
plots <- vector('list', n <- length(tickers))
base <- ggplot(Stocks, aes(x = Date)) + 
  theme_gray() 
for(i in seq_len(n)){
  plots[[i]] <- base + 
    geom_point(aes_string(y = tickers[i]), col = colors[i]) 
    geom_line(aes_string(y = tickers[i]), col = colors[i]) 
    ggtitle(titles[i])
}
reduce(plots, `+`)

但是对于股票来说,第一种选择可能会产生更好的结果。

【讨论】:

    猜你喜欢
    • 2021-09-08
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多