我想使用 reclin2 包或 R 中提供的任何其他记录匹配包,以便根据几个数字和分类属性(数量、价格、位置、地址…)来匹配每 2 个市场参与者报告的交易。
我想知道是否有可能使用 R 包并集成用户定义的函数来计算两个记录之间每个属性的相似度?例如,为了比较值 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))
报告_ID | 区块_ID | 数量 | 性格 |
---|---|---|---|
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 |
结果 df 可能如下所示:相似度数据框
报告_ID_组合 | 相似度_编号 | 相似度_性格 |
---|---|---|
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/记录匹配领域的工作人员就此类问题提供任何提示,我们将不胜感激。
谢谢,
马吕斯
使用以下内容:
#devtools::install_github('oonyambu/SLR')
similarity <- function(x, y){
if (is.numeric(x)) list(num = min(x,y)/max(x,y))
else list(num = +(x == y))
}
SLR::multiple_tests(.~Report_ID|Block_ID, df, similarity)|>
tidyr::pivot_wider(names_from = response, values_from = num)
# A tibble: 12 × 4
Block_ID grp Number Character
<chr> <chr> <dbl> <dbl>
1 1 1:2 0.6 1
2 1 1:3 0.4 0
3 1 2:3 0.667 0
4 2 4:5 0.909 0
5 2 4:6 0.1 0
6 2 5:6 0.11 0
7 3 7:8 NA 0
8 3 7:9 0.25 1
9 3 7:10 1 0
10 3 8:9 NA 0
11 3 8:10 NA 1
12 3 9:10 0.25 0