Как сопоставить строки нечетких совпадений из двух наборов данных?

Я работал над способом объединения двух наборов данных, основанных на несовершенной строке, такой как название компании. В прошлом мне приходилось сопоставлять два очень грязных списка, в одном списке были имена и финансовая информация, в другом списке были имена и адреса. Ни у одного не было уникальных идентификаторов, чтобы соответствовать!Предположим, что очистка уже была применена, и там могут быть TYPOS и вставки.

Пока что AGREP - самый близкий инструмент, который я нашел, который мог бы работать. Я могу использовать расстояния Левенштейна в пакете AGREP, которые измеряют количество удалений, вставок и замен между двумя строками. 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))
}

Ответы на вопрос(6)

Ваш ответ на вопрос