R - простая запись Recage - следующий шаг?
Я пытаюсь сделать простую прямую связь с library('RecordLinkage')
,
Так что у меня есть только один вектор
tv3 = c("TOURDEFRANCE", 'TOURDEFRANCE', "TOURDE FRANCE",
"TOURDE FRANZ", "GET FRESH")
Функция, которая мне нужна compare.dedup
из library('RecordLinkage')
и я получаю:
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()
но он возвращает только пары. В принципе, вы можете сделать только 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
Что я хочу сделать, это просто атрибут для аналогичного объекта ("TOURDEFRANCE", 'TOURDEFRANCE', "TOURDE FRANCE", "TOURDE FRANZ"
), одно из возможных похожих имен объектов.
Как я мог установить отсечение, скажем 0.90
на моей матрице отличия, а затем retreive
все строки похожего объекта?
Если мои данные находятся в кадре данных
tv3
1 TOURDEFRANCE
2 TOURDEFRANCE
3 TOURDE FRANCE
4 TOURDE FRANZ
5 GET FRESH
Сделать что-то вроде which
cut-off > 0.90
и получить соответствующие строки?
Любая помощь для этого простого Record Linkage очень приветствуется!
1 ответ
Взятый из этого поста, вот пример, который должен работать для вас:
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()
).