R - 简单记录链接 - 下一步?

R - simple Record Linkage - the next step ?

我正在尝试与 library('RecordLinkage') 进行一些简单的直接链接。

所以我只有一个向量

tv3 = c("TOURDEFRANCE", 'TOURDEFRANCE', "TOURDE FRANCE", 
"TOURDE FRANZ", "GET FRESH") 

我需要的函数是 library('RecordLinkage')compare.dedup,我得到:

compare.dedup(as.data.frame(tv3))$pairs

$pairs
id1 id2 tv3 is_match
1    1   2   1       NA
2    1   3   0       NA
3    1   4   0       NA
4    1   5   0       NA
5    2   3   0       NA
....

我找不到下一步的文档。然后我如何比较并找到我的相似对?

所以我找到了距离 jarowinkler() 但它 returns 只能成对。基本上只能做jarowinkler(tv3[1], tv3)一项一项。

所以我想问:您是否需要执行自己的循环来获得结果,还是 compare.dedup 函数有更直接的方法?

mat = matrix(0, length(tv3), length(tv3))

for(j in 1:length(tv3)){
  for(i in 1:length(tv3)){
    { mat[i,j] = jarowinkler(tv3[j], tv3[i]) }
  }
}

差异矩阵

> mat
          [,1]      [,2]      [,3]      [,4]      [,5]
[1,] 1.0000000 1.0000000 0.9846154 0.9333333 0.5240741
[2,] 1.0000000 1.0000000 0.9846154 0.9333333 0.5240741
[3,] 0.9846154 0.9846154 1.0000000 0.9525641 0.5133903
[4,] 0.9333333 0.9333333 0.9525641 1.0000000 0.5240741
[5,] 0.5240741 0.5240741 0.5133903 0.5240741 1.0000000

我想做的只是similar对象("TOURDEFRANCE", 'TOURDEFRANCE', "TOURDE FRANCE", "TOURDE FRANZ")的简单属性,可能的相似 个对象名称。

如何在我的相异矩阵上设置一个截止点,比方说 0.90,然后 retreive similar 对象的所有行?

如果我的数据在数据框中

             tv3
1  TOURDEFRANCE
2  TOURDEFRANCE
3 TOURDE FRANCE
4  TOURDE FRANZ
5     GET FRESH

做类似 which cut-off > 0.90 的操作并检索相应的行?

非常欢迎为这个简单的记录链接提供任何帮助!

摘自 this post,这是一个适合您的示例:

tv3 = as.data.frame(c("TOURDEFRANCE", 'TOURDEFRANCE', "TOURDE FRANCE", 
    "TOURDE FRANZ", "GET FRESH"))
colnames(tv3) <- "name"

tv3 %>% compare.dedup(strcmp = TRUE) %>%
        epiWeights() %>%
        epiClassify(0.5) %>%
        getPairs(show = "links", single.rows = TRUE) -> matches

结果,matches 数据框应该可以帮助您确定阈值(在 epiClassify() 中设置)。