It is possible, but requires a (free and easy) account from the US Postal Service.
Using the rusps package (more info: https://github.com/hansthompson/rusps)
The output is a little repetitive, and the function doesn't seem to be pipe-able, but it worked well on the data you posted. It shouldn't be too hard to clean up % join to your data (or use on it's own).
addresses <- tibble::tribble(
~Id, ~StreetName, ~City, ~State,
1, "100 Railroad Ave", "Elkton", "MD",
2, "414 Grant St", "Pittsburgh", "PA",
3, "1400 John F Kennedy Blvd", "Philadelphia", "PA",
4, "800 N French St", "Wilmington", "DE"
)
# devtools::install_github('hansthompson/rusps')
library(rusps)
library(XML)
username <- 'XXXYYYYYZZZZ' # get this quickly and freely
#by signing up at https://registration.shippingapis.com/ (not commercial).
output <- validate_address_usps(street = addresses$StreetName,
city = addresses$City,
state = addresses$State,
username = username)
output
Address2 City State Zip5 Zip4 .attrs
1 100 RAILROAD AVE ELKTON MD 21921 5537 0
2 414 GRANT ST PITTSBURGH PA 15219 2409 1
3 1400 JOHN F KENNEDY BLVD PHILADELPHIA PA 19107 3200 2
4 800 N FRENCH ST WILMINGTON DE 19801 3594 3
5 NA NA NA NA NA 0
6 100 RAILROAD AVE ELKTON MD 21921 5537 0
7 414 GRANT ST PITTSBURGH PA 15219 2409 0
8 1400 JOHN F KENNEDY BLVD PHILADELPHIA PA 19107 3200 0
9 100 RAILROAD AVE ELKTON MD 21921 5537 1
10 414 GRANT ST PITTSBURGH PA 15219 2409 1
11 100 RAILROAD AVE ELKTON MD 21921 5537 0
12 414 GRANT ST PITTSBURGH PA 15219 2409 0
13 1400 JOHN F KENNEDY BLVD PHILADELPHIA PA 19107 3200 0
14 800 N FRENCH ST WILMINGTON DE 19801 3594 0
All of the columns returned are list-columns for some reason. To clean it up:
unnest(output, cols = everything()) %>%
group_by(Address2) %>%
slice(1)
# A tibble: 5 x 6
# Groups: Address2 [5]
Address2 City State Zip5 Zip4 .attrs
<chr> <chr> <chr> <chr> <chr> <chr>
1 100 RAILROAD AVE ELKTON MD 21921 5537 0
2 1400 JOHN F KENNEDY BLVD PHILADELPHIA PA 19107 3200 2
3 414 GRANT ST PITTSBURGH PA 15219 2409 1
4 800 N FRENCH ST WILMINGTON DE 19801 3594 3
5 NA NA NA NA NA 0