R语言多模式匹配实现文件名与标准化股票代码关联
R语言实现文件名批量匹配标准化供应商代码
前置准备
先安装加载tidyverse套件,包含数据处理和字符串匹配所需的常用工具:
install.packages("tidyverse") # 仅第一次运行需要安装 library(tidyverse)
步骤1:构建结构化匹配规则表
不要把每个供应商的匹配模式单独存为变量,统一整理成对照表方便后续维护,30个供应商每个3种模式只需填入90行即可:
match_rule <- tibble( # 所有待匹配的关键词模式 pattern = c("APPL", "Apple", "MSFT", "Microsoft"), # 模式对应的标准化代码 standard_ticker = c("APPL", "APPL", "MSFT", "MSFT") )
如果有匹配优先级需求,可将优先级更高的模式放在表的靠前位置。
步骤2:构造待处理数据集
修正示例数据的语法问题,实际使用时替换为你自己的数据集即可:
financial_reports <- tibble( financial_report_names = c("AppleFinance.csv", "APPLStock.csv", "financesMICROSOFT.csv", "MSFTstocks.csv", "UberStocks.csv"), report_month = c("202101", "202101", "202102", "202102", "202102") )
步骤3:执行批量匹配
result <- financial_reports %>% # 忽略大小写匹配文件名和规则表中的模式 left_join( match_rule, join_by(str_detect(financial_report_names, regex(pattern, ignore_case = TRUE))) ) %>% # 对每个文件去重,取优先级最高的匹配结果 group_by(financial_report_names, report_month) %>% summarise( matching_ticker = first(standard_ticker), .groups = "drop" ) %>% # 无匹配结果替换为字符串"N/A",不需要可以删掉这行 mutate(matching_ticker = replace_na(matching_ticker, "N/A"))
输出结果验证
运行print(result)即可得到和预期完全一致的输出:
| financial_report_names | report_month | matching_ticker |
|---|---|---|
| AppleFinance.csv | 202101 | APPL |
| APPLStock.csv | 202101 | APPL |
| financesMICROSOFT.csv | 202102 | MSFT |
| MSFTstocks.csv | 202102 | MSFT |
| UberStocks.csv | 202102 | N/A |
内容的提问来源于stack exchange,提问作者versb
相关产品推荐
相关产品推荐

