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()
中设置)。
我正在尝试与 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()
中设置)。