如何解析已下载的SEC EDGAR 13F报表TXT文件得到可用数据
R语言解析SEC EDGAR 13F报表本地TXT文件方案
- 依赖包准备
需要用到3个R包,可执行以下代码安装加载:# 安装未安装的包 install.packages(c("xml2", "stringr", "dplyr")) # 加载包 library(xml2) library(stringr) library(dplyr) - 核心逻辑
EDGAR公开的原始TXT文件为多格式混合内容,13F报表的结构化持仓数据全部封装在<informationTable>和</informationTable>标签对内部的XML片段中,只需提取该片段即可解析得到可用的表格数据。 - 完整解析代码
替换代码中的本地文件路径为你实际存储的TXT文件路径即可运行:# 1. 读取本地TXT文件全部内容 local_file_path <- "你的本地13F TXT文件路径" # 例:"~/downloads/0001567619-21-010580.txt" raw_content <- readLines(local_file_path, warn = FALSE, encoding = "UTF-8") %>% paste(collapse = "\n") # 2. 提取13F持仓数据对应的XML片段 xml_segment <- str_extract(raw_content, "<informationTable.*?</informationTable>") # 3. 解析XML并转换为数据框 xml_doc <- read_xml(xml_segment) holdings_nodes <- xml_find_all(xml_doc, ".//infoTable") holdings_df <- lapply(holdings_nodes, function(node) { child_nodes <- xml_children(node) data.frame( t(setNames(xml_text(child_nodes), xml_name(child_nodes))), check.names = FALSE, stringsAsFactors = FALSE ) }) %>% bind_rows() # 输出解析结果预览 head(holdings_df) - 输出说明
最终得到的holdings_df即为结构化的13F持仓表,包含股票名称、CUSIP编码、持仓市值、持仓数量、投资类型等全部公示字段,可直接用于后续分析。 - 异常处理
如果出现XML提取失败的情况,可打开原始TXT文件确认持仓数据的包裹标签,调整正则匹配的标签名即可适配不同时期的13F报表。
内容的提问来源于stack exchange,提问作者GValER
相关产品推荐
相关产品推荐

