data(patient_records)
dfr <- patient_records
# An exact match on surname followed by an exact match on forename
stages <- as.list(dfr[c("surname", "forename")])
p1 <- links(criteria = stages)
# An exact match on forename followed by an exact match on surname
p2 <- links(criteria = rev(stages))
# Nested matches
# Same sex OR birth year
m.cri.1 <- sub_criteria(
format(dfr$dateofbirth, "%Y"), dfr$sex,
operator = "or")
# Same middle name AND a 10 year age difference
age_diff <- function(x, y){
diff <- abs(as.numeric(x) - as.numeric(y))
wgt <- diff %in% 0:10 & !is.na(diff)
wgt
}
m.cri.2 <- sub_criteria(
format(dfr$dateofbirth, "%Y"), dfr$middlename,
operator = "and",
match_funcs = c(age_diff, exact_match))
# Nested match criteria 'm.cri.1' OR 'm.cri.2'
n.cri <- sub_criteria(
m.cri.1, m.cri.2,
operator = "or")
# Record linkage with additional match criteria
p3 <- links(
criteria = stages,
sub_criteria = list(cr1 = m.cri.1,
cr2 = m.cri.2))
# Record linkage with additonal nested match criteria
p4 <- links(
criteria = stages,
sub_criteria = list(cr1 = n.cri,
cr2 = n.cri))
dfr$p1 <- p1; dfr$p2 <- p2
dfr$p3 <- p3; dfr$p4 <- p4
head(dfr)
Run the code above in your browser using DataLab