#
# Install Package: 'Cmd + Shift + B'
# Check Package: 'Cmd + Shift + E'
# Test Package: 'Cmd + Shift + T'
#
# Update documentation: devtools::document()
#
# DAWA-dokumentation: https://dawa.aws.dk/dok/api/adresse#datavask
#' Get single address match from DAWA (Best match only)
#'
#' @param address_as_string String with full or partial address. Can be created by adviceverse::as_dkaddress().
#' @param output E.g. "all", "string"
#' @return tibble
get_DAWAddress <- function(address_as_string = NULL,
output = "all"){
# TODO: Implementer et mål for hvor godt matchet er.
# Get data from DAWA "Adressevask"
get_url <- httr::GET(
url = "https://dawa.aws.dk/datavask/adresser",
query = list(betegnelse = address_as_string)
)
get_content <- httr::content(get_url)
# Extract values
# Values: Vejnavn (2), husnr. (4), etage (12), dør (13), postnr. (6)
get_values <- get_content[[2]][[1]][[1]][c(2, 4, 12, 13, 6)]
# "A" angiver, at den returnerede adresse matcher præcist, bortset fra forskelle på store og små bogstaver samt punktuering.
# "B" angiver et sikkert match, hvor der dog er mindre variationer (stavefejl eller lignende).
# "C" angiver et usikkert match, hvor der er en stor sansynlighed for at den fundne adresse ikke er korrekt.
get_match <- get_content[1]
# Convert NULL to NA
get_values[sapply(get_values, is.null)] <- NA
# Tibble (vectors as rows)
# TODO: Tjek om det egentlig er hurtigere at definerere ny tibble end at mingelere med den gamle.
tib <-
get_values %>%
dplyr::bind_rows() %>%
dplyr::bind_cols(get_match) %>%
dplyr::rename(doer = dør,
match = kategori) %>%
dplyr::mutate(postnr = as.integer(postnr),
adresse = as_dkaddress(vejnavn, husnr, etage, doer, postnr)) %>%
dplyr::rename_all(paste0, "DAWA")
# Return
if (output == "all") tib
else if (output == "string") tib %>% dplyr::select(adresseDAWA)
}
#' Add address matches from DAWA to dataframe/tibble (Best match only)
#'
#' @param df Dataframe
#' @param adress_col Address column name (string)
#' @param output
#' @return Data frame
add_DAWAddress <- function(df,
address_col,
output = "all") {
address_tib <- pbapply::pblapply(df[[address_col]], get_DAWAddress, output = output) %>%
dplyr::bind_rows()
dplyr::bind_cols(df, address_tib)
}
#' Format adress
#' Return NA if "vejnavn", "husnr", or "postnr" is missing.
#'
#' @param vejnavn Address parameter, e.g. "Gammel Kongevej"
#' @param husnr Address parameter, e.g. "5E"
#' @param etage Address parameter, e.g. "4"
#' @param doer Address parameter, e.g. "th"
#' @param postnr Address parameter, e.g. "1610"
#' @return Address as string, i.e. "Gammel Kongevej 5E, 4. th., 1610"
as_dkaddress <- function(vejnavn = NA,
husnr = NA,
etage = NA,
doer = NA,
postnr = NA) {
ifelse(
is.na(vejnavn) | is.na(husnr) | is.na(postnr),
NA_character_,
paste0(vejnavn,
" ",
husnr,
",",
ifelse(!is.na(etage), paste0(" ", etage, "."), paste0("")),
ifelse(!is.na(doer), paste0(" ", doer, "."), paste0("")),
ifelse(!is.na(doer) | !is.na(etage), ",", ""),
" ",
postnr
)
)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.