使用R的quantmod提取股票分红数据并转换为DataFrame的问题
批量转换quantmod分红数据为结构化DataFrame
你已经通过以下代码定义股票列表并批量获取分红数据:
stocks <- c("AAPL", "MMM", "CAT", "MSFT", "TSLA") dividends_list <- sapply(stocks, function(x) try(getDividends(x, auto.assign = FALSE)))
由于使用了try(),列表中可能存在获取失败的错误对象,需要先过滤无效结果,再将剩余xts格式的分红数据转换为目标结构的DataFrame。
方法一:Base R实现
# 过滤获取失败的结果 dividends_list <- dividends_list[sapply(dividends_list, function(x) !inherits(x, "try-error"))] # 转换并合并为结构化DataFrame dividends_df <- do.call(rbind, lapply(names(dividends_list), function(ticker) { data <- dividends_list[[ticker]] data.frame( date = index(data), ticker = ticker, dividend = as.numeric(data), stringsAsFactors = FALSE ) }))
方法二:Tidyverse实现(更简洁)
如果已安装tidyverse和xts包,可使用管道操作简化流程:
library(tidyverse) library(xts) dividends_df <- dividends_list %>% # 移除获取失败的错误对象 discard(inherits, "try-error") %>% # 遍历转换每个元素并合并 imap_dfr(function(data, ticker) { tibble( date = index(data), ticker = ticker, dividend = as.numeric(data) ) })
处理后的dividends_df将呈现你期望的格式:
date ticker dividend 1 2022-11-04 AAPL 0.23 2 2022-08-05 AAPL 0.23 3 2022-11-17 MMM 1.49 4 2022-08-19 MMM 1.49 ...
内容的提问来源于stack exchange,提问作者bodega18
相关产品推荐
相关产品推荐

