在R中使用模糊/近似字符串匹配合并两个数据帧

描述


我有两个数据集,其中包含我需要合并的信息。我仅有的常见字段是不完全匹配的字符串和可能完全不同的数字字段


解释问题的唯一方法是向您显示数据。这是a.csv和b.csv。我正在尝试将B合并为A。


B中有三个字段,A中有四个字段。公司名称(仅文件A),基金名称,资产类别和资产。到目前为止,我的重点一直是尝试通过替换单词或字符串的一部分以创建完全匹配项,然后使用以下方法来匹配基金名称:


a <- read.table(file = "http://bertelsen.ca/R/a.csv",header=TRUE, sep=",", na.strings=F, strip.white=T, blank.lines.skip=F, stringsAsFactors=T) 

b <- read.table(file = "http://bertelsen.ca/R/b.csv",header=TRUE, sep=",", na.strings=F, strip.white=T, blank.lines.skip=F, stringsAsFactors=T)

merge(a,b, by="Fund.Name") 

但是,这只能使我达到30%的匹配率。剩下的我要手工做。


资产是一个数值字段,在任何一个字段中都不总是正确的,并且如果基金的资产较低,则可能会发生巨大变化。资产类别是一个字符串字段,在两个文件中“通常”是相同的,但是存在差异。


更为复杂的是文件B中的不同系列的资金。例如:


AGF加拿大价值


AGF加拿大价值-D


在这些情况下,我必须选择一个不保留的匹配项,或者选择一个称为“ A”,“-A”或“ Advisor”的匹配项。



您说什么是最好的方法?我必须每月进行一次锻炼,而手动进行匹配非常耗时。代码示例将起到辅助作用。


想法


我认为一种可行的方法是根据字符串中每个单词的第一个大写字母对字符串进行规范化。但是我还无法弄清楚如何使用R实现这一目标。


我考虑的另一种方法是根据资产,基金名称,资产类别和公司的组合创建匹配索引。但是同样,我不确定如何用R做到这一点。或者,即使有可能,也是如此。


代码示例,注释,思想和指导非常感谢!


一只甜甜圈
浏览 1779回答 3
3回答

慕后森

我也是加拿大人,认出基金名称。这是一个困难的过程,因为每个数据提供者都为各个基金名称选择自己的形式。有些使用不同的结构,例如全部以基金或类别结尾,其他到处都是。每个人似乎也都选择自己的短格式,并且这些格式会定期更改。这就是为什么像您这样的许多人定期手动执行此操作的原因。一些咨询公司会列出索引以链接各种资源,不确定您是否探索过该路线?正如Shane和Marek所指出的那样,这不仅仅是一项直截了当的工作,而是一项匹配的任务。许多公司正在为此奋斗。我正在为此工作...
打开App,查看更多内容
随时随地看视频慕课网APP