A single addr_street in y is chosen for each addr_street in x.
If exact matches (using as.character) are not found,
candidate matches are chosen by
fuzzy matching on street name (using phonetic street key and street name)
and exact matching on the enabled street components.
Ordinal street names use restricted phonetic candidates:
an ordinal phonetic key like #0007 may fuzzy match only to plausible
ordinal neighbors such as digit shifts (#0070, #0700, #7000)
or same-width substitutions (#0008, #0009), not arbitrary
OSA-distance-one ordinal keys such as #0017 or #0077.
If multiple candidates remain after fuzzy matching, the first candidate in
y is returned.
addr_street objects with missing or empty @name are not matched and
returned as missing instead.
Usage
match_addr_street(
x,
y,
name_phonetic_dist = 1L,
name_fuzzy_dist = 2L,
match_street_predirectional = TRUE,
match_street_posttype = TRUE,
match_street_pretype = TRUE,
match_street_postdirectional = FALSE
)Arguments
- x, y
addr_street vectors to match
- name_phonetic_dist
integer; maximum optimized string alignment distance between
phonetic_street_key()of x and y to consider a possible match- name_fuzzy_dist
integer; maximum optimized string alignment distance between
@nameof x and y to consider a possible match- match_street_predirectional
logical; require street predirectional to match when selecting street candidates?
- match_street_posttype
logical; require street posttype to match when selecting street candidates?
- match_street_pretype
logical; require street pretype to match when selecting street candidates?
- match_street_postdirectional
logical; require street postdirectional to match when selecting street candidates?
Value
An addr_street vector, the same length as x, containing the
selected match in y for each element of x. Unmatched elements are
returned as missing addr_street() values.
Examples
my_streets <- addr_street(
predirectional = "",
premodifier = "",
pretype = "",
name = c("Beechview", "Vivian", "Springfield", "Round Bottom", "Pfeiffer", "Beachview",
"Vevan", "Srpingfield", "Square Top", "Pfeffer", "Wuhlper", ""),
posttype = c("Cir", "Pl", "Pike", "Rd", "Rd", "Cir", "Pl", "Pike", "Rd", "Rd", "Ave", ""),
postdirectional = ""
)
the_streets <- nad_example_data()$nad_addr@street
match_addr_street(my_streets, the_streets)
#> <addr_street> function ()
#> @ predirectional : chr [1:12] "" "" "" "" "" "" "" "" NA "" "" NA
#> @ premodifier : chr [1:12] "" "" "" "" "" "" "" "" NA "" "" NA
#> @ pretype : chr [1:12] "" "" "" "" "" "" "" "" NA "" "" NA
#> @ name : chr [1:12] "BEECHVIEW" "VIVIAN" "SPRINGFIELD" "ROUND BOTTOM" ...
#> @ posttype : chr [1:12] "Cir" "Pl" "Pike" "Rd" "Rd" "Cir" "Pl" "Pike" NA "Rd" ...
#> @ postdirectional: chr [1:12] "" "" "" "" "" "" "" "" NA "" "" NA
toggle_y <- addr_street(
predirectional = c("E", "", "", "E"),
premodifier = "",
pretype = c("", "", "US Hwy", "US Hwy"),
name = c("14th", "Oak", "Main", "Main"),
posttype = c("St", "Rd", "Rd", "Rd"),
postdirectional = c("", "", "", "E"),
map_pretype = FALSE,
map_posttype = FALSE,
map_directional = FALSE,
map_ordinal = FALSE
)
# predirectional is required by default, so blank "14th St" stays unmatched
format(match_addr_street(
addr_street(
predirectional = "",
premodifier = "",
pretype = "",
name = "14th",
posttype = "St",
postdirectional = "",
map_pretype = FALSE,
map_posttype = FALSE,
map_directional = FALSE,
map_ordinal = FALSE
),
toggle_y
))
#> [1] ""
format(match_addr_street(
addr_street(
predirectional = "",
premodifier = "",
pretype = "",
name = "14th",
posttype = "St",
postdirectional = "",
map_pretype = FALSE,
map_posttype = FALSE,
map_directional = FALSE,
map_ordinal = FALSE
),
toggle_y,
match_street_predirectional = FALSE
))
#> [1] "E 14th St"
# posttype can also be made optional during fuzzy street-name matching
format(match_addr_street(
addr_street(
predirectional = "",
premodifier = "",
pretype = "",
name = "Oka",
posttype = "Ave",
postdirectional = "",
map_pretype = FALSE,
map_posttype = FALSE,
map_directional = FALSE,
map_ordinal = FALSE
),
toggle_y,
name_fuzzy_dist = 1L
))
#> [1] ""
format(match_addr_street(
addr_street(
predirectional = "",
premodifier = "",
pretype = "",
name = "Oka",
posttype = "Ave",
postdirectional = "",
map_pretype = FALSE,
map_posttype = FALSE,
map_directional = FALSE,
map_ordinal = FALSE
),
toggle_y,
name_fuzzy_dist = 1L,
match_street_posttype = FALSE
))
#> [1] "Oak Rd"
# pretype is required by default; postdirectional can also be required
format(match_addr_street(
addr_street(
predirectional = "E",
premodifier = "",
pretype = "US Hwy",
name = "Mian",
posttype = "Rd",
postdirectional = "E",
map_pretype = FALSE,
map_posttype = FALSE,
map_directional = FALSE,
map_ordinal = FALSE
),
toggle_y,
match_street_pretype = FALSE,
name_fuzzy_dist = 1L
))
#> [1] "E US Hwy Main Rd E"
format(match_addr_street(
addr_street(
predirectional = "E",
premodifier = "",
pretype = "US Hwy",
name = "Mian",
posttype = "Rd",
postdirectional = "E",
map_pretype = FALSE,
map_posttype = FALSE,
map_directional = FALSE,
map_ordinal = FALSE
),
toggle_y,
name_fuzzy_dist = 1L
))
#> [1] "E US Hwy Main Rd E"
format(match_addr_street(
addr_street(
predirectional = "E",
premodifier = "",
pretype = "US Hwy",
name = "Mian",
posttype = "Rd",
postdirectional = "E",
map_pretype = FALSE,
map_posttype = FALSE,
map_directional = FALSE,
map_ordinal = FALSE
),
toggle_y,
name_fuzzy_dist = 1L,
match_street_pretype = TRUE,
match_street_postdirectional = TRUE
))
#> [1] "E US Hwy Main Rd E"