From 9935b90f9c8c70845b97521dd86fda2a08f501a7 Mon Sep 17 00:00:00 2001 From: Daniel Falster Date: Mon, 9 Dec 2024 09:40:42 +1100 Subject: [PATCH] Bugfix for join_locations (#140) * bug fix - join_location_properties, separate_trait_values (#138) - join_location_properties(format = "single_column_json") was not retaining location_name as its own column. * Both fixed this and added tests - Also, value_type was being lost during separate_trait_values - and probably has been for a long time. * Bump version (3.0.1) --------- Co-authored-by: Elizabeth Wenk --- DESCRIPTION | 2 +- R/join_.R | 2 +- R/separate_trait_values.R | 2 +- tests/testthat/test-flatten_database.R | 14 ++++++++++++++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 3f0c52d..01a3899 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: austraits Title: Helpful functions to access the AusTraits database and wrangle data from other traits.build databases -Version: 3.0.0 +Version: 3.0.1 Authors@R: c(person(given = "Daniel", family = "Falster", diff --git a/R/join_.R b/R/join_.R index 5387f57..7e56095 100644 --- a/R/join_.R +++ b/R/join_.R @@ -386,7 +386,7 @@ join_location_properties <- function(database, compacted_locations_column <- locations %>% - tidyr::nest(data = -dplyr::all_of(c("dataset_id", "location_id"))) %>% + tidyr::nest(data = -dplyr::all_of(c("dataset_id", "location_id", "location_name"))) %>% dplyr::mutate(location_properties = purrr::map_chr(data, jsonlite::toJSON)) %>% dplyr::select(-dplyr::any_of("data")) %>% dplyr::ungroup() diff --git a/R/separate_trait_values.R b/R/separate_trait_values.R index 4886f1c..82b0eeb 100644 --- a/R/separate_trait_values.R +++ b/R/separate_trait_values.R @@ -53,7 +53,7 @@ separate_trait_values <- function(trait_data, definitions) { dplyr::bind_rows(out_1, out_2) %>% dplyr::select(-n_vals) %>% dplyr::mutate(replicates = clean_NA(replicates), - value_type = factor(clean_NA(value_type), levels = names(definitions$definitions$value_type$values)) + value_type = clean_NA(value_type) ) %>% dplyr::arrange(observation_id, trait_name, value_type) } diff --git a/tests/testthat/test-flatten_database.R b/tests/testthat/test-flatten_database.R index b944883..792553f 100644 --- a/tests/testthat/test-flatten_database.R +++ b/tests/testthat/test-flatten_database.R @@ -28,6 +28,20 @@ test_that("`flatten_database` defaults to `single_column_pretty` for contributor expect_equal(combined_table_3a$data_contributors, combined_table_3b$data_contributors) }) +test_that("`flatten_database` is working with format = single_column_json", { + expect_no_error(combined_table_json <- flatten_database(database_2, format = "single_column_json")) + expect_contains(names(combined_table_json), "location_name") + expect_length(combined_table_json, 66) + expect_true(stringr::str_detect(combined_table_json$location_properties[1], "^\\[\\{")) + expect_true(stringr::str_detect(combined_table_json$data_contributors[1], "^\\[\\{")) +}) + +test_that("`flatten_database` is working with format = many_columns", { + expect_no_error(combined_table_many <- flatten_database(database_2, format = "many_columns")) + expect_contains(names(combined_table_many), "location_name") + expect_contains(names(combined_table_many), "temporal_context: sampling season") +}) + # test that join_location_coordinates works as intended database_no_coord <- austraits_5.0.0_lite %>% extract_dataset("Kooyman_2011")