问题标签 [record-linkage]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
513 浏览

r - Jaro-Winkler 的包之间的区别

我正在使用模糊匹配来清理用户输入的药物数据,并且我正在使用 Jaro-Winkler 的距离。当我注意到默认设置没有给出相同的值时,我正在测试哪个包与 Jaro-Winkler 的距离更快。谁能帮我理解差异来自哪里?例子:

我假设它与权重有关,我知道我在两者上都使用了默认值。但是,如果有更多经验的人可以阐明正在发生的事情,我将不胜感激。谢谢!

文档:

https://cran.r-project.org/web/packages/stringdist/stringdist.pdf https://cran.r-project.org/web/packages/RecordLinkage/RecordLinkage.pdf

0 投票
2 回答
252 浏览

r - 比较和链接具有不同字序/字数的字符串

我正在尝试使用 recordLinkage 包将两个数据集链接在一起,其中一个数据集倾向于给出多个姓氏/中间名,另一个只给出一个姓氏。目前正在使用的字符串比较函数是 Jaro-Winkler 函数,但是返回的分数取决于字符串如何偶然匹配,而不是较短字符串的内容是否包含在较长字符串中的任何位置。这导致创建了许多质量较差的链接。错误权重的可重现示例如下:

我希望 id 的 2 和 3 获得与 id #1 大致相同的权重,但目前它们要低得多,因为它们的姓在两个数据集中的位置并不完全相同(尽管内容是一致的)。有没有办法可以修改此处使用的字符串比较函数/数据结构,以便考虑不同的顺序?

补充说明:

0 投票
3 回答
546 浏览

python - 在单个数据框中显示所有匹配对 - Python Record Linkage

我有一个熊猫 MultiIndex 对象:

这个 MultiIndex 对象定义了以下 8 对:(1,10), (1,11), (2,10), (2,11), (3,10), (3,11), (8,10) , (8,11)。

级别中列出的元素对应于 DataFrame 的索引:

我想要的是创建一个新的 DataFrame 来显示上面定义的所有对。看起来像:

有没有有效的方法来实现这一点?(如果可能,不要使用 for 循环)

提前致谢

0 投票
1 回答
503 浏览

r - R:记录链接问题,所有字段组合在 1 列中

我必须将数据集 A 中的 a 列与数据集 B 中的 b 列相匹配。但是不同的变量不在单独的字段(a、b、c 列)中,而是在同一个字段中。

我一直在研究RecordLinkagefastLink包,它们在分隔字段时效果很好。

单独的字段:

快速链接示例

记录链接示例

组合字段的问题:

我希望无论在同一字段中以及无论姓名、城市和出生日期的顺序如何,记录都能匹配。

0 投票
0 回答
226 浏览

matching - 记录与多个数据集的链接

问题

fastLinkRecordLinkage包在匹配从数据库 A 到数据库 B 的记录(行)方面做得非常好,反之亦然。开发人员正在努力从仅匹配 2 个数据库扩展到多个数据库。

我在这里给出了一个简单的例子。

同时,我们将如何匹配多个数据帧?例如,我有多个诊所 A、B、C、D、E、F 患者的医疗记录,我想将它们合并为一个。

一个可重现的例子:

预期结果 :

最后,我想要唯一标识的记录:

即使结果不像上面那样干净,也没关系。目标是从所有 6 条记录中找到一条统一的记录,并且属于同一个实体。fastLink和RecordLinkage都负责重复数据删除(删除重复项)。

在这种情况下,我如何开发一种方法来处理两个以上的数据库?

0 投票
1 回答
1382 浏览

r - 在 R 中跨多个“脏”列匹配两个数据集

我经常需要通过多个匹配列来匹配两个数据集,原因有两个。首先,这些特征中的每一个都是“脏”的,这意味着即使应该(对于真正匹配的行),单个列也不会始终匹配。其次,特征不是唯一的(例如,男性和女性)。像这样的匹配对于跨时间匹配(前测与后测分数)、不同数据模式(观察到的特征和实验室值)或研究参与者的多个数据集很有用。

我需要一个选择最佳匹配的启发式方法。然后我可以一起对两者进行分析,如this question中所述。请注意,有许多匹配列和许多 ID,因此必须将它们都指定为列表或向量。例如,我在下面创建了两个数据集进行匹配。在示例中,DT1 第 1 行 (ID 1) 是 DT2 第 1 行 (ID 55) 的最佳匹配,即使只有“match4”列匹配;这是因为 DT2 第 2 行和第 3 行更适合 DT1 第 2 行和第 3 行。奖励:DT1 第 7 行同样匹配 DT2 第 7 行和第 8 行,但与 DT2 第 7 行有部分匹配,因此理想情况下会被选中。

问题:对于 DT1,从 DT2 中选择匹配行的“最佳猜测”,并且仅使用 DT2 中的每一行一次。在 R 中执行此操作的最佳方法是什么(以有效和“最佳实践”的惯用方式)?

我的初步方法:我创建了第三个 data.table,其中包含来自 DT1 的一列 ID,称为 DTmatch。所有后续列都是来自 DT2 的 ID。对于 DTmatch 的第二列(以 DT2 的第一个 ID 命名),每个值应表示匹配列的计数(在本例中为 0 到 4)。接下来,在匹配表中找到对每一行和每一列唯一的最高匹配值。最后,创建最后一列,指定与 DT1 ID 匹配的 DT2 ID(DTmatch 中的第 1 列)。

0 投票
2 回答
821 浏览

r - 根据 2 列中的值 + 模糊匹配对表进行重复数据删除

我有一个从Zotero导出的 CSV 文件,其中包含我的图书馆条目的元数据。我知道它包含很多重复项,但要摆脱它们并不容易:

  • 并非所有具有相似标题的项目实际上都是重复的,例如

    /li>
  • 并非所有实际上相似的项目都具有 100% 相同的元数据字符串,例如

    /li>

这是一个极端的例子(差异通常不是那么大),但正如您所见,预清洁并不能完全解决这个问题;所以这个想法是消除在两列以上包含相似值的行 - 例如,“作者”和“标题”。

到目前为止我尝试过/浏览过的内容:

  • OpenRefine - 几乎不熟悉它,因此无法想出或找到任何可行的方法。
  • Excel 模糊查找扩展- 并没有真正按照我需要的方式工作。
  • Python - 再说一次,我不擅长这种语言;我找不到任何相关的解决方案/指南。
  • R:尝试了一些想法:

首先在“作者”列的 for 循环中使用 agrep 来获取重复行的索引;然后对“标题”列执行相同的操作;然后比较向量并对值重合的行进行重复数据删除。不用说,我不能超越第 1 步:

结果是(几乎)完全是胡言乱语;另外我收到警告消息:

我还通读了fuzzywuzzyR文档,但没有找到任何可以提供帮助的函数。

最后,我尝试了 RecordLinkage包。尽管如此,我还是无法超越基础知识。文档相当繁重,对所有事情都没有明确说明;指南很少,我发现的那些(例如this)使用已经准备好身份向量的示例数据集 - 所以我无法弄清楚如何在我的数据上复制它。

所以在这一点上,我不在乎是否在 OpenRefine/R/Py/SQL/whatever 中进行,只是以任何方式进行。

0 投票
1 回答
274 浏览

r - 使用 R 中的 compare.linkage 比较两个数据帧并创建对来输入数据

我正在尝试在基于另一个数据的数据集中输入一些数据。但是,要做到这一点,我需要比较几个变量,每个变量都有一个权重。此外,我需要使用 KEY 变量形成对,这些变量是我数据中的 id。

我试图使用compare.linkage,但我找不到插入我想要的权重的方法,例如 40% 到Age、 40% 到CHBORN和 20% 到URBAN

我想找到类似这样的结果:

通常,我使用埃默里大学的软件 FRIL 来执行此操作,但我试图将所有内容集中在R.

最好的,

特丽莎

0 投票
1 回答
278 浏览

r - R 中的 RecordLinkage 包 - 为各个链接变量添加权重

我正在关注RPubs的优秀教程,它使用了宏伟的 RecordLinkage 包。我将其应用于我自己的数据,但我只会使用本教程来解释我的问题。

在用于比较的两个数据集中,链接中使用了许多常见字段:

然后使用 compare.linkage() 函数比较这些字段:

这将创建一个名为“a”的大型 RecLinkData 对象,其中包含一堆比较对。

下一步是使用期望最大化 (EM) 算法计算 M 和 U 权重(协议权重):

我认为这基本上是在创建一个整体协议权重,它是所有单个链接变量的产物。

我的问题是如何增加单个链接变量之一的重要性?

例如,我可能知道“姓氏”字段在两个数据集中都是可靠且准确的,所以如果姓氏完全一致,那么在整体一致得分中给予更大的权重。

即使是一些关于在哪里寻找的指示也会有所帮助,我对此有点迷茫,甚至不知道在代码方面要尝试什么。

0 投票
0 回答
205 浏览

r - 在 R 的 RecordLinkage 包中使用 RLBigData 类时的错误输出

使用 R 包RecordLinkage时,后面的一些输出epiClassify()emClassify()函数(可以对RLBigDataLinkage类对象进行操作)会输出错误。当我使用为较小的数据比较设计的函数时,这些错误不会出现,例如compare.linkage(). 可以在此处的包小插曲中找到描述此内容的文档。

我的总体目标是在两个表之间“模糊匹配”数据;一旦我知道基于其他变量的表之间哪些行相似,我就可以使用索引从一个表中的列中获取另一个表中缺少的唯一 ID。

数据:这是一些用于重现错误的虚拟数据...

当我在函数中使用上述数据进行较小的比较时,它工作正常,没有错误:

但是,在我使用RLBigData该类之后(如下面的代码所示),在以下情况下会出现错误:

  • 我尝试在以下情况下访问该对象resultemClassify()nrow中的错误(object@pairs):对于“RLResult”类的这个对象,没有名称“pairs”的插槽

  • 尝试通过以下方式获取摘要summary(result)dbGetQuery(object@con, "select count( ) from data1") 中的错误:对于“RLBigDataLinkage”类的这个对象,没有名称为“con”的插槽*

  • 试图通过以下方式获取比较表getTable(result)table.ff(object@data@pairs$is_match, object@prediction, useNA = "ifany") 中的错误:当前仅允许 vmodes 整数 - 你确定 ... 仅包含因子或整数?

  • RLBigDataLinkage()首次运行该函数时也会引发警告:警告消息:1:在 result_fetch(res@ptr, n = n) 中:不需要为语句调用 dbFetch(),仅用于查询

以下代码应重现这些错误

我不确定为什么代码在第二种情况下会吐出这些错误。在移动到更大的数据集之前,我想对小数据集上的代码进行故障排除。如果有人能阐明这个包输出的这些错误和警告,我将不胜感激。