reclin2 中的数字/用户定义的相似度计算

问题描述 投票:0回答:1

我想使用 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/记录匹配领域的工作人员就此类问题提供任何提示,我们将不胜感激。

谢谢,

马吕斯

r duplicates matching pattern-recognition record-linkage
1个回答
1
投票

使用以下内容:

#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
© www.soinside.com 2019 - 2024. All rights reserved.