Объединение двух фреймов данных с использованием нечеткого / приблизительного сопоставления строк в R

ОПИСАНИЕ

У меня есть два набора данных с информацией, которую мне нужно объединить. Единственные общие поля, которые у меня есть, это строки, которые не полностью совпадают, и числовое поле, которое может существенно отличаться

Единственный способ объяснить проблему - показать вам данные. Вотa.csv а такжеb.csv, Я пытаюсь объединить B с A.

Есть три поля в B и четыре в A. Название компании (только для файла A), Название фонда, Класс актива и Активы. До сих пор я сосредоточился на попытках сопоставить имена фондов, заменив слова или части строк для создания точных совпадений, а затем используя:

a <- read.table(file = "http://bertelsen.ca/R/a.csv",header=TRUE, sep=",", na.strings=F, strip.white=T, blank.lines.skip=F, stringsAsFactors=T) 
b <- read.table(file = "http://bertelsen.ca/R/b.csv",header=TRUE, sep=",", na.strings=F, strip.white=T, blank.lines.skip=F, stringsAsFactors=T)
merge(a,b, by="Fund.Name") 

Тем не менее, это только приводит меня к примерно 30% соответствия. Остальное я должен сделать вручную.

Активы - это числовое поле, которое не всегда корректно в обоих случаях и может сильно отличаться, если у фонда малые активы. Класс активов - это строковое поле, которое «в общем» одинаково в обоих файлах, однако существуют расхождения.

К усложнению добавляются различные серии средств в файле B. Например:

AGF канадская стоимость

AGF Canadian Value-D

В этих случаях мне нужно выбрать тот, который не сериализован, или выбрать тот, который называется «A», «-A» или «Advisor» в качестве совпадения.

ВОПРОС

Что бы вы сказали, это лучший подход? Это упражнение - то, что я должен делать ежемесячно, и сопоставление их вручную занимает невероятно много времени. Примеры кода будут полезными.

ИДЕИ

Один метод, который, я думаю, может работать, - это нормализация строк на основе первой заглавной буквы каждого слова в строке. Но я не смог понять, как это осуществить, используя R.

Другой метод, который я рассмотрел, заключался в создании индекса совпадений на основе комбинации активов, названия фонда, класса активов и компании. Но опять же, я не уверен, как это сделать с Р. Или, если на то пошло, если это вообще возможно.

Примеры кода, комментарии, мысли и указания приветствуются!

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

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