使用R

时间:2016-07-26 11:03:04

标签: r string

我的列x包含字符串ABN-AMRO-NV/SUNTRUST-BK/WACHOVIA和列y,其中包含字符串SunTrust Banks。如您所见,列x有三个字符串,由正斜杠分隔。因此,我必须使用strsplit进行拆分,以便在模糊匹配之前分离字符串。为了进行模糊匹配,我尝试了stringdistadistagrep等软件包。但是我没有达到预期的效果。

那么,什么应该是解决我的匹配问题的好方法?如何处理这个匹配问题才能获得好结果?正如您在示例中看到的那样,SunTrust Banks与单词SUNTRUST-BK匹配,这是我期望的结果,使用模糊匹配。

另外,为了提供注释,我在x列和y列中的字符串会有很大不同。例如,列x中的字符串有时没有正斜杠,意味着只有一个字符串。

感谢大家的帮助和指导。

1 个答案:

答案 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-BKSunTrust Banks之间的匹配项。您可能希望在匹配之前进行一些预处理(例如,转换为小写,删除标点符号)。