我一直在研究一种基于不完善的字符串(例如公司名称)来联接两个数据集的方法。过去,我必须匹配两个非常脏的列表,一个列表包含名称和财务信息,另一个列表包含名称和地址。都没有唯一的ID可以匹配!假设已经应用了清洁,并且可能存在打字和插入错误。
到目前为止,AGREP是我发现最有效的工具。我可以在AGREP包中使用levenshtein距离,该距离用于测量两个字符串之间的删除,插入和替换的数量。AGREP将返回距离最小(最相似)的字符串。
但是,我一直无法将命令从单个值转换为将其应用于整个数据帧。我已经粗略地使用了for循环来重复AGREP函数,但是总有一种更简单的方法。
请参见以下代码:
a<-data.frame(name=c('Ace Co','Bayes', 'asd', 'Bcy', 'Baes', 'Bays'),price=c(10,13,2,1,15,1))
b<-data.frame(name=c('Ace Co.','Bayes Inc.','asdf'),qty=c(9,99,10))
for (i in 1:6){
a$x[i] = agrep(a$name[i], b$name, value = TRUE, max = list(del = 0.2, ins = 0.3, sub = 0.4))
a$Y[i] = agrep(a$name[i], b$name, value = FALSE, max = list(del = 0.2, ins = 0.3, sub = 0.4))
}
慕田峪7331174