Я хотел бы связать два фрейма данных, которые используют разные цифровые клавиши, но аналогичные строки. В частности, один фрейм данных использует цифровой ключ GVKEY
и название компании CONML
> head(temp.compustat[order(temp.compustat$CONML, decreasing = T), ])
GVKEY CONML
225994 13023 ZZZZ Best Co Inc
211017 11696 Zytrex Corp
213816 11951 Zytec Systems Inc
309886 29163 Zytec Corp
373950 129441 Zynex Inc
383184 145228 ZymoGenetics Inc
> dim(temp.compustat)
[1] 31354 2
В другом фрейме данных используется другой цифровой ключ companyid
и название компании company
, которое может немного отличаться от CONML
в первой базе данных.
> head(temp.dealscan[ order(temp.dealscan$company, decreasing = T), ])
companyid company
70473 18192 Zytec Corp
32025 16969 Zynaxis Inc
19714 92271 ZYGO Teraoptix Inc
80473 13185 Zygo Corp
1901 24303 Zycon Corp SDN Bhd
33993 21219 Zycon Corp
> dim(temp.dealscan)
[1] 85818 2
(Я сортирую в обратном порядке, потому что в базах данных DealScan есть пробелы и * в начале некоторых записей). Кажется, что функция RLBigDataLinkage
в пакете RecordLinkage
является решением, но я не могу получить даже неконтролируемые ссылки на работу. Вот моя ошибка.
> library(RecordLinkage)
> rpairs <- RLBigDataLinkage(dataset1 = temp.compustat, dataset2 = temp.dealscan, exclude = 1, strcmp = 2, strcmpfun = "levenshtein")
> result <- epiClassify(rpairs, threshold.upper = 0.5)
Error in if (max <= min) stop("must have max > min") :
missing value where TRUE/FALSE needed
In addition: Warning message:
In nData1 * nData2 : NAs produced by integer overflow
Встретившись со мной вчера, я увидел вопрос об использовании функции расстояния Левенштейна вручную. Является ли этот подход лучшим вариантом для меня? Эти фреймы данных довольно большие, поэтому кажется, что RLBigData
должен быть правильным подходом (авторы пакета рекомендуют его для> 1000 записей). Спасибо!