我正在尝试使用 recordLinkage 包将两个数据集链接在一起,其中一个数据集倾向于给出多个姓氏/中间名,另一个只给出一个姓氏。目前正在使用的字符串比较函数是 Jaro-Winkler 函数,但是返回的分数取决于字符串如何偶然匹配,而不是较短字符串的内容是否包含在较长字符串中的任何位置。这导致创建了许多质量较差的链接。错误权重的可重现示例如下:
library(RecordLinkage)
data1 <- as.data.frame(list("lname" = c("lolli gaggen nazeem", "lolli gaggen nazeem", "lolli gaggen nazeem"),
"bday" = c("1908-08-08", "1979-12-12", "1560-06-06") ) )
data2 <- as.data.frame(list("lname" = c("lolli", "gaggen", "nazeem"),
"bday" = c("1908-08-08", "1979-12-12", "1560-06-06") ) )
blocking_variable <- c("bday")
pass <- compare.linkage(data1, data2, blockfld = blocking_variable, strcmp = T)
pass_weights <- epiWeights(pass)
getPairs(pass_weights, single.rows = TRUE)
id1 lname.1 bday.1 id2 lname.2 bday.2 Weight
1 1 lolli gaggen nazheem 1908-08-08 1 lolli 1908-08-08 0.9162463
2 2 lolli gaggen nazheem 1979-12-12 2 gaggen 1979-12-12 0.8697165
3 3 lolli gaggen nazheem 1560-06-06 3 nazheem 1560-06-06 0.6995502
我希望 id 的 2 和 3 获得与 id #1 大致相同的权重,但目前它们要低得多,因为它们的姓在两个数据集中的位置并不完全相同(尽管内容是一致的)。有没有办法可以修改此处使用的字符串比较函数/数据结构,以便考虑不同的顺序?
补充说明:
这两个数据集都有数百万行,因此内存效率在这里绝对重要!
有时,另一个数据集可能不仅仅是一个姓氏,所以我们将 3 个单词与 2 个单词进行比较 - 可能最好先解决简单的情况
- 两个数据集之间的名称通常会存在拼写差异
- 目前我们正在使用 IBM 的质量阶段进行此链接,他们使用“MULT_UNCERT”比较功能(https://www.ibm.com/support/knowledgecenter/en/SSZJPZ_11.7.0/com.ibm.swg.im.iis .ds.design.help.doc/topics/r_qresfgde_MULT_UNCERT_comparison.html)。我想在 R 中复制它。