我的列x
包含字符串ABN-AMRO-NV/SUNTRUST-BK/WACHOVIA
和列y
,其中包含字符串SunTrust Banks
。如您所见,列x
有三个字符串,由正斜杠分隔。因此,我必须使用strsplit
进行拆分,以便在模糊匹配之前分离字符串。为了进行模糊匹配,我尝试了stringdist
,adist
,agrep
等软件包。但是我没有达到预期的效果。
那么,什么应该是解决我的匹配问题的好方法?如何处理这个匹配问题才能获得好结果?正如您在示例中看到的那样,SunTrust Banks
与单词SUNTRUST-BK
匹配,这是我期望的结果,使用模糊匹配。
另外,为了提供注释,我在x
列和y
列中的字符串会有很大不同。例如,列x
中的字符串有时没有正斜杠,意味着只有一个字符串。
感谢大家的帮助和指导。
答案 0 :(得分:1)
看看下面的例子。我刚刚使用了一种随机匹配方法(在这种情况下是JaroWinkler)。
library(stringdist)
fuzzy_select<-function(name_vec,name){
Filter(function(x) ain(x, name, maxDist=.7, method="jw"),
strsplit(name_vec, "/")[[1]])
}
fuzzy_select("ABN-AMRO-NV/SUNTRUST-BK/WACHOVIA", "SunTrust Banks")
如您所见,maxDist
必须非常高才能找到SUNTRUST-BK
和SunTrust Banks
之间的匹配项。您可能希望在匹配之前进行一些预处理(例如,转换为小写,删除标点符号)。