R: нечеткое соединение между двумя наборами данных

Мне нужно нечеткое совпадение и получить расстояние между почтовым индексом в двух наборах данных.

Вот ниже пример:

name_a <- c("Aldo", "Andrea", "Alberto", "Antonio", "Angelo")
name_b <- c("Sara", "Serena", "Silvia", "Sonia", "Sissi")

zip_street_a <- c("1204 Roma Street 8", "1204 Roma Street 8", "1204 Roma Street 8", "1204 Venezia street 10", "1204 Venezia Street 110")

zip_street_b <- c("1204 Roma Street 81", "1204 Roma Street 8A", "1204 Roma Street 8B", "1204 Roma Street 8C", "1204 Venezia Street 10C")

db_a <- data.frame(name_a, zip_street_a)
db_b <- data.frame(name_b, zip_street_b)

names(db_a)[names(db_a)=='zip_street_a'] <- 'zipstreet'
names(db_b)[names(db_b)=='zip_street_b'] <- 'zipstreet'

Теперь я использовал library(fuzzyjoin) в сочетании с library(dplyr) создать следующий скрипт:

match_data <- stringdist_left_join(db_a, db_b,
              by = "zipstreet",
              ignore_case = TRUE,
              method = "jaccard",
              max_dist = 1,
              distance_col = "dist"
) %>%
  Group_by(zipstreet.x)

Скрипт работает отлично. Но я хотел бы иметь различное расстояние между следующими комбинациями адресов:

а) 1204 Рома-стрит 8 против 1204 Рома-стрит 81 -> расстояние = 0,0147
б) 1204 Рома-стрит 8 против 1204 Рома-стрит 8А -> расстояние = 0,0147

Теперь улица Рома № 81 очень далеко от улицы Рома 8. С другой стороны, улица Рома № 8А очень близка к улице Рома № 8.

Итак, мне нужно, чтобы расстояние было очень близко к 0 для 8А, и далеко от 0 для 81.

Как это возможно сделать?

1 ответ

Расстояние основано на совпадении строк, то есть нечетком совпадении. Но вы говорите о физическом расстоянии между двумя адресами?

В этом случае вам нужно собрать данные о долготе и широте на основе каждого адреса.

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