Мне нужно нечеткое совпадение и получить расстояние между почтовым индексом / адресом в двух разных наборах данных.
Вот пример:
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)
Скрипт работает нормально. Но хотелось бы иметь разное расстояние между следующими комбинациями адресов:
a) 1204 Roma Street 8 против 1204 Roma Street 81 -> расстояние = 0,0147
b) 1204 Roma Street 8 против 1204 Roma Street 8A -> distance = 0,0147
Теперь улица Рома номер 81 находится очень далеко от улицы Рома 8. С другой стороны, улица Рома номер 8А находится очень близко к улице Рома номер 8.
Итак, мне нужно, чтобы расстояние было очень близко к 0 для 8A и далеко от 0 для 81.
Как это возможно?
ggmap
вы найдетеgeocode
функцию, которая даст вам координату gps, тогда вы можете вычислить фактические расстояния - person Moody_Mudskipper   schedule 12.07.2018db_a$zipstreet2 <- gsub("\\D+$","",db_a$zipstreet)
избавится от последних символов, которые не являются числами, возможно, это поможет быстро исправить - person Moody_Mudskipper   schedule 12.07.2018