Я работаю над тем, чтобы присоединиться к двум наборам данных на основе несовершенной строки, например, имени компании. Раньше мне приходилось сопоставлять два очень грязных списка, один список имел имена и финансовую информацию, другой список - имена и адреса. Также не было уникальных идентификаторов! ПРИНИМАЙТЕ, ЧТО ЧИСТКА УЖЕ ПРИМЕНЯЕТСЯ И МОЖЕТ БЫТЬ ТИПО И ВСТАВКИ.Как я могу сопоставить строки нечеткого соответствия из двух наборов данных?
До сих пор AGREP является ближайшим инструментом, который я нашел, что может работать. Я могу использовать расстояния levenshtein в пакете 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))
}
Основываясь на каждой обратной связи и некоторых, выкарабкающихся от меня, я создал функцию, которая решает мою точную проблему. Код можно найти здесь: https://github.com/Adamishere/Fuzzymatching/blob/master/Fuzzy%20String%20Match%20FunctionV1.R –
спасибо вам эту функцию. Это очень полезно. Однако я не могу передать свой столбец в string1, string2 и id2. Мои данные находятся в data.table, поэтому не уверен, как я должен передавать их при вызове функции. Не могли бы вы предложить. Извините, если мой вопрос очень простой, я начал изучать R и все еще долгий путь – user1412
Я бы просто использовал data.frame(), а затем, как только совпадение будет выполнено, конвертируйте в data.table() –