Я пытаюсь изменить единицу анализа набора данных с зарегистрированных инцидентов на лиц, сообщивших об инцидентах. Поскольку один и тот же человек сообщал более одного раза, я использовал функцию 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
Интересно, есть ли у кого-нибудь предложения, как этого добиться?
Заранее спасибо!