ОПИСАНИЕ
У меня есть два набора данных с информацией, которую мне нужно объединить. Единственные общие поля, которые у меня есть, это строки, которые не полностью совпадают, и числовое поле, которое может существенно отличаться
Единственный способ объяснить проблему - показать вам данные. Вот 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.
Другим методом, который я рассмотрел, было создание индекса совпадений на основе комбинации активов, названия фонда, класса активов и компании. Но опять же, я не уверен, как это сделать с R. Или, если на то пошло, если это вообще возможно.
Примеры кода, комментарии, мысли и указания приветствуются!