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

Сделать что-то вроде whichcut-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()).

Другие вопросы по тегам