From 3593740bc3580301676f30d1b54bf5a62571c200 Mon Sep 17 00:00:00 2001 From: Lextuga007 Date: Wed, 20 Mar 2024 17:38:09 +0000 Subject: [PATCH] Changed columns to search for the name --- R/get_data.R | 99 ++++++++++++++++++---------------- tests/testthat/test-get_data.R | 10 +++- 2 files changed, 63 insertions(+), 46 deletions(-) diff --git a/R/get_data.R b/R/get_data.R index e2bb7c6..d219eb6 100644 --- a/R/get_data.R +++ b/R/get_data.R @@ -37,13 +37,14 @@ get_data <- function(data, column <- rlang::as_string(column) # Check there is corresponding type data somewhere in data frame + # Use this to allow for other column names to be used in later code is_postcode_check <- sum(is_postcode(as.vector(t(data))), na.rm = TRUE) is_lsoa_check <- sum(is_lsoa(as.vector(t(data))), na.rm = TRUE) - if (column == "default" && is_postcode_check == 0 && is_lsoa_check > 0) { - column <- "lsoa11" - } else if (column == "default" && url_type == "postcode") { + if ("postcode" %in% colnames(data)) { column <- "postcode" + } else if ("lsoa11" %in% colnames(data)) { + column <- "lsoa11" } else { column <- rlang::eval_tidy(rlang::quo(column)) } @@ -62,7 +63,11 @@ get_data <- function(data, fix_invalid = fix_invalid, var = column # Not required but doesn't cause error ) - } else if (is.atomic(data) && is_postcode_check == 0 && + } + + ## Generate specific text for the url + + if (is.atomic(data) && is_postcode_check == 0 && is_lsoa_check > 0) { text <- paste0( "LSOA11CD IN ('", @@ -80,13 +85,13 @@ get_data <- function(data, collapse = "', '" ), "')" ) - } else { - data - } - - if (is_postcode_check == 0 && is_lsoa_check > 0 | url_type == "imd") { - data_out <- imd_api(text = text, - req = req) + } else if (exists("data_transformed") && url_type == "imd") { + text <- paste0( + "LSOA11CD IN ('", + paste(data_transformed$lsoa_code, + collapse = "', '" + ), "')" + ) } # Because APIs only return data where a match has been made which results in @@ -94,52 +99,56 @@ get_data <- function(data, # Postcode information is passed through {NHSRpostcodetools} which handles # this but IMD is handled here. - if (exists("data_transformed") && is.data.frame(data) && - url_type == "postcode") { - data |> - dplyr::left_join( - data_transformed - ) - } else if (exists("data_transformed") && is.atomic(data) && - url_type == "postcode") { - tibble::as_tibble(data) |> - dplyr::left_join( - data_transformed, - dplyr::join_by(value == postcode) - ) |> - dplyr::rename(postcode = value) - } else if (exists("data_transformed") && is.data.frame(data) && - url_type == "url") { - data |> + if (exists("data_transformed") && is.data.frame(data)) { + pc_data <- data |> dplyr::left_join( data_transformed - ) |> - dplyr::left_join( - data_out, - dplyr::join_by(lsoa_code == lsoa) ) - # } else if (exists("data_transformed") && is.atomic(data) && - # url_type == "url") { - # tibble::as_tibble(data) |> - # dplyr::left_join( - # data_transformed, - # dplyr::join_by(value == postcode) - # ) |> - # dplyr::rename(postcode = value) - } else if (is.data.frame(data)) { - data |> + } else if (exists("data_transformed") && is.atomic(data)) { + pc_data <- data_transformed + } + + + ## IMD data + + if (is_postcode_check == 0 && is_lsoa_check > 0 && + is.data.frame(data)) { + data_out <- imd_api( + text = text, + req = req + ) + + imd_data <- data |> dplyr::left_join( data_out, dplyr::join_by({{ column }} == lsoa11cd) ) - } else if (is.atomic(data)) { - tibble::as_tibble(data) |> + } else if (is_postcode_check == 0 && is_lsoa_check > 0 && is.atomic(data)) { + data_out <- imd_api( + text = text, + req = req + ) + + imd_data <- tibble::as_tibble(data) |> dplyr::left_join( data_out, dplyr::join_by(value == lsoa11cd) ) |> dplyr::rename(lsoa11 = value) + } + + ## Final data + + if (exists("pc_data") && url_type == "imd") { + data_out <- imd_api( + text = text, + req = req + ) + + data_out + } else if (exists("pc_data") && url_type == "postcode") { + pc_data } else { - data + imd_data } } diff --git a/tests/testthat/test-get_data.R b/tests/testthat/test-get_data.R index 2822ff7..9ba7b00 100644 --- a/tests/testthat/test-get_data.R +++ b/tests/testthat/test-get_data.R @@ -2,7 +2,7 @@ postcodes <- c("HD1 2UT", "HD1 2UU", "HD1 2UV") -imd <- c("E01011107", "E01011229", "E01000002") +imd <- c("E01011107", "E01011229", "E01002") # # Taken from # # www.gov.uk/government/statistics/english-indices-of-deprivation-2019 @@ -226,6 +226,14 @@ httptest2::with_mock_dir("imd", { # vectors + testthat::expect_equal( + nrow(get_data(imd)), n_rows + ) + + testthat::expect_equal( + ncol(get_data(imd)), n_col_vector + ) + testthat::expect_equal( nrow(get_data(imd, url_type = "imd")), n_rows )