R中多个选项的模式匹配
pattern matching with multiple options in R
我有一个文件名列表,所有这些文件名都来自不同的提供商。提供者名称的给出不一致,例如“Apple”和“APPL”。如果数据具有匹配的字符串,我试图找到一种方法将正确的名称附加到文件数据框。例如,如果文件名包含“Apple”,那么在数据框中,正确的名称“APPL”将附加在它的旁边。对不起,如果我没有包括我的尝试,我只是认为这会混淆这个问题,因为我是一个完全的初学者。多谢!
(实际上我有大约 1000 个文件名和 30 个左右的提供商名称,每个名称都有大约 3 种可能的模式。哎呀!)
stock_tickers <- data.frame("APPL", "MSFT")
financial_reports <- data.frame("financial_report_names" = "AppleFinance.csv", "APPLStock.csv", "financesMICROSOFT.csv", "MSFTstocks.csv", "UberStocks.csv",
"report_month" = "202101", "202101", "202102", "202102", "202102")
APPL_matches <- c("APPL", "Apple")
MSFT_matches <- c("MSFT", "Microsoft")
#expected output
# financial_report_names report month matching ticker
# "AppleFinance.csv" 202101 APPL
# "APPLStock.csv" 202102 APPL
# "financesMICROSOFT.csv" 202102 MSFT
# "MSFTstocks.csv" 202102 MSFT
# "UberStocks.csv" 202102 N/A
您可以创建一个正则表达式模式,它可以采用所有可能的代码模式组合并使用 stringr::str_replace_all
-
ptrn <- c(".*(APPL|Apple|APPLE).*" = 'APPL',
".*(MSFT|Microsoft|MICROSOFT).*" = 'MSFT',
".*(Uber).*" = 'UBER')
stringr::str_replace_all(financial_reports$financial_report_names, ptrn)
#[1] "APPL" "APPL" "MSFT" "MSFT" "UBER"
如果保存在 dataframe 或 csv 中,您也可以动态生成此模式。
数据
financial_reports <- structure(list(financial_report_names = c("AppleFinance.csv",
"APPLStock.csv", "financesMICROSOFT.csv", "MSFTstocks.csv", "UberStocks.csv"
), report_month = c("202101", "202101", "202102", "202102", "202102"
)), class = "data.frame", row.names = c(NA, -5L))
我有一个文件名列表,所有这些文件名都来自不同的提供商。提供者名称的给出不一致,例如“Apple”和“APPL”。如果数据具有匹配的字符串,我试图找到一种方法将正确的名称附加到文件数据框。例如,如果文件名包含“Apple”,那么在数据框中,正确的名称“APPL”将附加在它的旁边。对不起,如果我没有包括我的尝试,我只是认为这会混淆这个问题,因为我是一个完全的初学者。多谢!
(实际上我有大约 1000 个文件名和 30 个左右的提供商名称,每个名称都有大约 3 种可能的模式。哎呀!)
stock_tickers <- data.frame("APPL", "MSFT")
financial_reports <- data.frame("financial_report_names" = "AppleFinance.csv", "APPLStock.csv", "financesMICROSOFT.csv", "MSFTstocks.csv", "UberStocks.csv",
"report_month" = "202101", "202101", "202102", "202102", "202102")
APPL_matches <- c("APPL", "Apple")
MSFT_matches <- c("MSFT", "Microsoft")
#expected output
# financial_report_names report month matching ticker
# "AppleFinance.csv" 202101 APPL
# "APPLStock.csv" 202102 APPL
# "financesMICROSOFT.csv" 202102 MSFT
# "MSFTstocks.csv" 202102 MSFT
# "UberStocks.csv" 202102 N/A
您可以创建一个正则表达式模式,它可以采用所有可能的代码模式组合并使用 stringr::str_replace_all
-
ptrn <- c(".*(APPL|Apple|APPLE).*" = 'APPL',
".*(MSFT|Microsoft|MICROSOFT).*" = 'MSFT',
".*(Uber).*" = 'UBER')
stringr::str_replace_all(financial_reports$financial_report_names, ptrn)
#[1] "APPL" "APPL" "MSFT" "MSFT" "UBER"
如果保存在 dataframe 或 csv 中,您也可以动态生成此模式。
数据
financial_reports <- structure(list(financial_report_names = c("AppleFinance.csv",
"APPLStock.csv", "financesMICROSOFT.csv", "MSFTstocks.csv", "UberStocks.csv"
), report_month = c("202101", "202101", "202102", "202102", "202102"
)), class = "data.frame", row.names = c(NA, -5L))