RecordLinkage: изменить единицу анализа, как экспортировать все связанные совпадения в дедуплицированном наборе данных в одну строку нового фрейма данных? - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь изменить единицу анализа набора данных с зарегистрированных инцидентов на лиц, сообщивших об инцидентах. Поскольку один и тот же человек сообщал более одного раза, я использовал функцию Compare.dedup из пакета RecordLinkage от R для определения пар совпадений, то есть пар инцидентов, о которых сообщил один и тот же человек. Тем не менее, я пытаюсь экспортировать все пары в один набор данных для дальнейшего анализа.

Вот код для фиктивных данных:

incidents <- structure(
  list(
    date = as.Date(c("01-02-2014", "02-02-2014", "02-02-2014", "03-02-2014", "04-02-2014","05-02-2014"), format = "%d-%m-%Y"),
    first_name = structure(c(1L, 2L, 3L, 4L, 5L, 1L), 
                         .Label = c("Dave", "Joe", "David", "Joseph", "Jo","Dave"),
                         class = "factor"),
    last_name = structure(c(1L, 2L, 3L, 4L, 5L, 1L),
                      .Label = c("Evans", "Miles", "Evans", "Myles",
                                 "Doe","Evans"), 
                      class = "factor"),
    sex = structure(c(1L, 1L, 1L, 1L, 2L, 1L), 
                  .Label = c("Male", "Female"), class = "factor"),
    dob = as.Date(c("14-02-1988", "01-05-1987", "14-02-1988", "01-05-1987", "04-02-1999","14-02-1988"), format = "%d-%m-%Y")),
  .Names = c("Date","Name","Surname","Sex","DOB"),
  class = "data.frame", row.names = c(NA, -6L)
)

Когда напечатано «происшествия» выглядит так:

        Date   Name Surname    Sex        DOB
1 2014-02-01   Dave   Evans   Male 1988-02-14
2 2014-02-02    Joe   Miles   Male 1987-05-01
3 2014-02-02  David   Evans   Male 1988-02-14
4 2014-02-03 Joseph   Myles   Male 1987-05-01
5 2014-02-04     Jo     Doe Female 1999-02-04
6 2014-02-05   Dave   Evans   Male 1988-02-14

Мне удалось напечатать пары в одной строке, но я собираюсь собрать все в одну строку (см. Ниже).

Я выполнил следующий код, чтобы определить и извлечь соответствующие пары:

# Generating the pairs

pairs = compare.dedup(incidents,
                      identity = NA, 
                      blockfld = FALSE,
                      phonetic = c(2), #runs phonetic comparison
                      phonfun = pho_h,
                      strcmp = c(3,4,5), #runs a string comparison
                      strcmpfun = levenshteinSim, #use levenshtein distance
                      exclude = c(1))

# Generating the weights
weightedpairs = emWeights(pairs, cutoff = 0.7)

#Classify the pairs
emresult = emClassify(weightedpairs)

Я могу получить связанные пары в одном ряду:

links=getPairs(emresult,show="links", single.rows=TRUE)

links

    id1     Date.1 Name.1 Surname.1 Sex.1      DOB.1 id2     Date.2 Name.2 Surname.2 Sex.2      DOB.2    Weight
1.1   1 2014-02-01   Dave     Evans  Male 1988-02-14   6 2014-02-05   Dave     Evans  Male 1988-02-14 20.876240
1     1 2014-02-01   Dave     Evans  Male 1988-02-14   3 2014-02-02  David     Evans  Male 1988-02-14 10.208543
3     3 2014-02-02  David     Evans  Male 1988-02-14   6 2014-02-05   Dave     Evans  Male 1988-02-14 10.208543
2     2 2014-02-02    Joe     Miles  Male 1987-05-01   4 2014-02-03 Joseph     Myles  Male 1987-05-01  9.886615

Однако я хотел бы объединить все совпадения, чтобы я получал по одной строке на человека на дату составления отчета. Что-то более или менее подобное:

        Date   Name Surname    Sex        DOB    Date2       Name2    Surname2    Sex2    DOB2    Date3    Name3    Surname3    Sex3    DOB3
1 2014-02-01   Dave   Evans   Male 1988-02-14    2014-02-02  David    Evans Male    1988-02-14    2014-02-05   Dave   Evans   Male 1988-02-14
2 2014-02-02    Joe   Miles   Male 1987-05-01    2014-02-03  Joseph   Myles Male    1987-05-01
3 2014-02-04     Jo     Doe Female 1999-02-04    NA          NA       NA

Интересно, есть ли у кого-нибудь предложения, как этого добиться?

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...