如何在R的reclin2等记录匹配包中自定义数值相似度计算?
R记录匹配:自定义数值相似度计算及NA处理方案求助
我希望使用R中的reclin2或其他记录匹配包,基于数量、价格、位置、地址等数值与分类属性,匹配两位市场参与者上报的交易记录。
核心需求是在包中集成自定义函数,计算两条记录间每个属性的相似度:比如比较数值90和100时,相似度按90/100=0.9计算,而非因不完全匹配返回FALSE。具体场景为:对同一Block_ID下的所有Report_ID进行两两比较,计算各属性的相似度得分。
示例数据
数据结构
structure(list(Report_ID = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), Block_ID = c(1, 1, 1, 2, 2, 2, 3, 3, 3, 3), Number = c(5, 3, 2, 10, 11, 100, 2, NA, 8, 2), Character = c("A", "A", "B", "A", "B", "C", "D", "A", "D", "A")), class = "data.frame", row.names = c(NA, -10L))
数据表格
| Report_ID | Block_ID | Number | Character |
|---|---|---|---|
| 1 | 1 | 5 | A |
| 2 | 1 | 3 | A |
| 3 | 1 | 2 | B |
| 4 | 2 | 10 | A |
| 5 | 2 | 11 | B |
| 6 | 2 | 100 | C |
| 7 | 3 | 2 | D |
| 8 | 3 | NA | A |
| 9 | 3 | 8 | D |
| 10 | 3 | 2 | A |
期望输出
期望得到如下相似度数据框:
| Report_ID_combination | Similarity_Number | Similarity_Character |
|---|---|---|
| 1_2 | 0.60 | 1 |
| 1_3 | 0.40 | 0 |
| 2_3 | 0.67 | 0 |
| 4_5 | 0.91 | 0 |
| 4_6 | 0.10 | 0 |
| 5_6 | 0.11 | 0 |
| 7_8 | NA | 0 |
| 7_9 | 0.25 | 1 |
| 7_10 | 1.00 | 0 |
| 8_9 | NA | 0 |
| 8_10 | NA | 1 |
| 9_10 | 0.25 | 0 |
当前困境
我了解到reclin2、RecordLinkage、StatMatch、fedmatch等常用记录匹配/去重包,针对分类特征提供了Jaccard、Levenshtein、Cosine等多种距离度量,但针对包含NA的数值进行相对相似度比较的场景,尚未找到合适的现成方案。
恳请R记录匹配领域的从业者提供相关解决方案建议。
内容的提问来源于stack exchange,提问作者Marius
相关产品推荐
相关产品推荐

