You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言遍历道指股票计算最低收盘价时循环返回相同值求助

解决R语言遍历道指成分股计算最低收盘价的重复值问题

错误原因分析

你遇到的问题核心是循环遍历对象错误:

  1. 你生成的DOW_st是一个单列的data.frame,当用for (i in DOW_st)循环时,R会遍历data.frame的列(而非单个股票代码),所以每次循环的i都是整个股票代码向量。
  2. tq_get接受多个代码时会返回所有股票的合并数据,此时计算min(data_i$close)得到的是所有股票收盘价的全局最小值,自然所有结果都重复这个值。

修正后的循环代码

先调整股票代码的存储格式为向量,再遍历单个代码:

library(tidyquant); library(dplyr)

# 获取道指成分股代码,转为向量格式(直接取symbol列)
DOW_st <- tq_index("DOW")$symbol
# 去掉最后一行(若为合计行)
DOW_st <- DOW_st[-length(DOW_st)]

# 初始化结果存储的data.frame
DOW_st_data <- data.frame()

for (sym in DOW_st) {
  # 获取单只股票的价格数据
  data_i <- tq_get(sym, from = "1980-01-01", to = "2024-06-20", get = "stock.prices")
  # 计算该股票的最低收盘价
  min_close <- min(data_i$close, na.rm = TRUE)
  # 将结果合并到data.frame中
  DOW_st_data <- bind_rows(DOW_st_data, tibble(symbol = sym, min_close = min_close))
}

更高效的tidyverse批量处理方案

完全不用循环,利用tidyquant的批量处理能力,代码更简洁且效率更高:

library(tidyquant); library(dplyr)

DOW_st_data <- tq_index("DOW") %>%
  # 保留股票代码列
  select(symbol) %>%
  # 去掉最后一行合计
  filter(row_number() <= n() - 1) %>%
  # 批量获取所有股票的价格数据
  tq_get(get = "stock.prices", from = "1980-01-01", to = "2024-06-20") %>%
  # 按股票代码分组
  group_by(symbol) %>%
  # 计算每组的最低收盘价
  summarise(min_close = min(close, na.rm = TRUE))

内容的提问来源于stack exchange,提问作者Rana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 04:52:15