diff --git a/NAMESPACE b/NAMESPACE index 61de488..74752ad 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -10,6 +10,7 @@ export(create_datastore_script) export(fix_utc_offset) export(fuzz_location) export(generate_ll_from_utm) +export(get_columns_from_files) export(get_custom_flags) export(get_dc_flags) export(get_df_flags) diff --git a/NEWS.md b/NEWS.md index 3a11070..aabf5e7 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,7 @@ +# QCkit v0.1.8 +2024-05-29 +* New funcion `get_columns_from_files` added. Function produces either 1) a dataframe of all column names within your files or 2) a list of common columns across your files. + # QCkit v0.1.7 2024-04-17 * Major updates to the DRR template including: using snake case instead of camel case for variables; updating Table 3 to only display filenames only when there are multiple files, fixed multiple issues with footnotes, added citations to NPSdataverse packages, added a section that prints the R code needed to download the data package and load it in to R. diff --git a/R/get_columns_from_files.R b/R/get_columns_from_files.R new file mode 100644 index 0000000..32eb9ef --- /dev/null +++ b/R/get_columns_from_files.R @@ -0,0 +1,79 @@ +#' Retrieve all columns from each dataset and columns that occur more than once across those datasets +#' +#' @description `get_columns_from_files()` produces two dataframes: one that lists all columns from within each of the .csv's in a specified working directory and another that lists all columns which appear more than once across those .csv's. +#' +#' @details `get_columns_from_files()` can be used as an initial step in data processing, particularly if the goal of the data processing is to merge multiple files into one, larger flat file. The function allows the user to preview and list out what columns exist within any given number of .csv's in a format that is more digestible. If the user chooses, they can also find commonalities across the columns in those files, highlighting any columns that serve as key variables upon which dataframes can then be joined. +#' +#' @param wd String. Your specified working directory; points to the directory where the .csv files you want to work with live. I.e., `getwd()`, `setwd("./data examples")`. +#' +#' @param common Logical. Defaults to `FALSE`. In default status, the function returns a full dataframe of all columns within each of the files in your working directory. If set to `TRUE`, the function returns a single list of columns that occur more than once across all of your files. +#' +#' @return one of two dataframes. If common set to `FALSE`, returns a dataframe of all columns in the files within your working directory. If common set to `TRUE`, returns a list of common columns across your files. +#' +#' @export +#' +#' @examples +#' \dontrun{ +#' get_columns_from_files(wd = setwd("./data examples"), common = TRUE) +#' } +#' +get_columns_from_files <- function(wd = getwd(), common = FALSE) { + + fileList <- list.files(path = wd, pattern = "\\.csv$") # create a list with the names of all csv's + + dfList <- suppressMessages(lapply(fileList, readr::read_csv)) # create a nested list of all datasets + + names(dfList) <- fileList # name each list within dfList by the name of it's respective file name + + maxCols <- list() # create an empty list to find the max number of columns from the provided datasets + + for(i in 1:max(length(dfList))){ + maxCols[i] <- length(names(dfList[[i]])) + } # fill in the list with the number of columns from each dataset + + maxCols <- max(unlist(maxCols)) # find the max column number from the list + + allCols <- tibble::tibble(.rows = maxCols) # create an empty dataframe with the maximum number of rows being the maximum number of columns from the datasets provided + + for(i in 1:max(length(dfList))){ + + columns <- names(dfList[[i]]) + + length(columns) <- maxCols + + tempdf <- tibble::tibble(columns) + + names(tempdf)[1] <- names(dfList)[i] + + allCols <- cbind(allCols, tempdf) + + } # add a list of all columns from each provided dataset to the empty dataframe + + df <- unlist(allCols) + + y <- list() + z <- list() + + for(i in 1:length(df)){ + + y[i] <- length(which(df == df[i])) + + } # find how many times a value within the column names is repeated. Generates a list with the number of times each respective column name is repeated across all column names + + + for(i in 1:length(y)){ + ifelse(y[i] > 1, + z[i] <- df[i], + next) + } # if a column name appears more than once across all column names, capture that column in a list (z) + + z <- Filter(Negate(is.null), z) # get rid of Null values + commonCols <- z %>% unique() %>% tibble::tibble() # Filter to a unique list of the column names that appear more than once + + colnames(commonCols)[1] <- "Common Columns" + + ifelse(common == FALSE, + return(allCols), + return(commonCols) + ) +} diff --git a/docs/404.html b/docs/404.html index bbe9a71..4210397 100644 --- a/docs/404.html +++ b/docs/404.html @@ -6,7 +6,7 @@ Page not found (404) • QCkit - + @@ -106,7 +106,7 @@

Page not found (404)

-

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/LICENSE-text.html b/docs/LICENSE-text.html index b5eec88..b898a65 100644 --- a/docs/LICENSE-text.html +++ b/docs/LICENSE-text.html @@ -1,5 +1,5 @@ -License • QCkitLicense • QCkit @@ -103,7 +103,7 @@

License

-

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/LICENSE.html b/docs/LICENSE.html index 940cf0b..f686c6b 100644 --- a/docs/LICENSE.html +++ b/docs/LICENSE.html @@ -1,5 +1,5 @@ -CC0 1.0 Universal • QCkitCC0 1.0 Universal • QCkit @@ -112,7 +112,7 @@

Statement of Purpose -

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/articles/DRR_Purpose_and_Scope.html b/docs/articles/DRR_Purpose_and_Scope.html index b45398f..c7246fc 100644 --- a/docs/articles/DRR_Purpose_and_Scope.html +++ b/docs/articles/DRR_Purpose_and_Scope.html @@ -6,7 +6,7 @@ DRR Purpose and Scope • QCkit - + @@ -350,7 +350,7 @@

General Studies
-Workflow for data collection, processing, dissemination, and use for general studies. Teal-colored boxes are subject to reproducibility requirements.

+Workflow for data collection, processing, dissemination, and use for general studies. Teal-colored boxes are subject to reproducibility requirements.

Workflow for data collection, processing, dissemination, and use for general studies. Teal-colored boxes are subject to reproducibility requirements. @@ -375,7 +375,7 @@

Vital Signs Monitoring diff --git a/docs/articles/Starting-a-DRR.html b/docs/articles/Starting-a-DRR.html index ba7067b..571853c 100644 --- a/docs/articles/Starting-a-DRR.html +++ b/docs/articles/Starting-a-DRR.html @@ -6,7 +6,7 @@ Starting a DRR • QCkit - + @@ -180,7 +180,7 @@

How to Start a DRR

+

  1. After selecting “OK” two things will happen: First, you the DRR Template file will open up. It is called “Untitled.Rmd” by default. @@ -223,7 +223,7 @@

    Examples

    -

    Site built with pkgdown 2.0.6.

    +

    Site built with pkgdown 2.0.9.

diff --git a/docs/articles/Using-the-DRR-Template.html b/docs/articles/Using-the-DRR-Template.html index 4ce1257..8aece29 100644 --- a/docs/articles/Using-the-DRR-Template.html +++ b/docs/articles/Using-the-DRR-Template.html @@ -6,7 +6,7 @@ Using the DRR Template • QCkit - + @@ -381,13 +381,13 @@

Automating Citations -Adding Citations - Source vs. Visual editing of the Template and how to access the citation manager.

+Adding Citations - Source vs. Visual editing of the Template and how to access the citation manager.

Adding Citations - Source vs. Visual editing of the Template and how to access the citation manager.

-Adding Citations - Using the citation manager.

+Adding Citations - Using the citation manager.

Adding Citations - Using the citation manager.

@@ -662,7 +662,7 @@

Liability Statements

-

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/articles/index.html b/docs/articles/index.html index dc24a3b..ea5753e 100644 --- a/docs/articles/index.html +++ b/docs/articles/index.html @@ -1,5 +1,5 @@ -Articles • QCkitArticles • QCkit @@ -82,7 +82,7 @@

All vignettes

-

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/authors.html b/docs/authors.html index 725329b..0502f2c 100644 --- a/docs/authors.html +++ b/docs/authors.html @@ -1,5 +1,5 @@ -Authors and Citation • QCkitAuthors and Citation • QCkit @@ -60,7 +60,7 @@
@@ -120,7 +120,7 @@

Citation

-

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/index.html b/docs/index.html index 9b95b5d..786f0a6 100644 --- a/docs/index.html +++ b/docs/index.html @@ -6,7 +6,7 @@ NPS Inventory and Monitoring Quality Control Toolkit • QCkit - + @@ -166,7 +166,7 @@

Dev status

-

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/news/index.html b/docs/news/index.html index 1e4b4bc..c90ed36 100644 --- a/docs/news/index.html +++ b/docs/news/index.html @@ -1,5 +1,5 @@ -Changelog • QCkitChangelog • QCkit @@ -63,6 +63,10 @@

Changelog

Source: NEWS.md +
+ +

2024-05-29 * New funcion get_columns_from_files added. Function produces either 1) a dataframe of all column names within your files or 2) a list of common columns across your files.

+

2024-04-17 * Major updates to the DRR template including: using snake case instead of camel case for variables; updating Table 3 to only display filenames only when there are multiple files, fixed multiple issues with footnotes, added citations to NPSdataverse packages, added a section that prints the R code needed to download the data package and load it in to R. * Updated the DRR documentation to account for new variable names.

@@ -158,7 +162,7 @@
diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index 1711d8b..396fed0 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -1,9 +1,9 @@ -pandoc: 3.1.1 -pkgdown: 2.0.6 +pandoc: 3.1.11 +pkgdown: 2.0.9 pkgdown_sha: ~ articles: DRR_Purpose_and_Scope: DRR_Purpose_and_Scope.html Starting-a-DRR: Starting-a-DRR.html Using-the-DRR-Template: Using-the-DRR-Template.html -last_built: 2024-04-18T15:51Z +last_built: 2024-05-30T20:15Z diff --git a/docs/reference/DC_col_check.html b/docs/reference/DC_col_check.html index 5dc4521..fff91e2 100644 --- a/docs/reference/DC_col_check.html +++ b/docs/reference/DC_col_check.html @@ -1,5 +1,5 @@ -TDWG Darwin Core Column Name Check 08-23-2022 — DC_col_check • QCkitQCkit: NPS Inventory and Monitoring Quality Control Toolkit — QCkit-package • QCkitQCkit: NPS Inventory and Monitoring Quality Control Toolkit — QCkit-package • QCkit @@ -97,7 +97,7 @@

Author

-

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/reference/check_dc_cols.html b/docs/reference/check_dc_cols.html index 5dc8f2a..127e730 100644 --- a/docs/reference/check_dc_cols.html +++ b/docs/reference/check_dc_cols.html @@ -1,5 +1,5 @@ -TDWG Darwin Core Column Name Check 08-23-2022 — check_dc_cols • QCkitTDWG Darwin Core Column Name Check 08-23-2022 — check_dc_cols • QCkit @@ -109,7 +109,7 @@

Examples

-

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/reference/check_te.html b/docs/reference/check_te.html index 3a08270..6100fde 100644 --- a/docs/reference/check_te.html +++ b/docs/reference/check_te.html @@ -1,5 +1,5 @@ -Threatened Or Endangered Species Checker Function — check_te • QCkitThreatened Or Endangered Species Checker Function — check_te • QCkit @@ -133,7 +133,7 @@

Examples

-

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/reference/convert_datetime_format.html b/docs/reference/convert_datetime_format.html index e849325..719f00b 100644 --- a/docs/reference/convert_datetime_format.html +++ b/docs/reference/convert_datetime_format.html @@ -1,5 +1,5 @@ -Convert EML date/time format string to one that R can parse — convert_datetime_format • QCkitConvert EML date/time format string to one that R can parse — convert_datetime_format • QCkit @@ -114,7 +114,7 @@

Examples

-

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/reference/convert_long_to_utm.html b/docs/reference/convert_long_to_utm.html index 7bead2c..c54c91a 100644 --- a/docs/reference/convert_long_to_utm.html +++ b/docs/reference/convert_long_to_utm.html @@ -1,5 +1,5 @@ -Return UTM Zone — convert_long_to_utm • QCkitReturn UTM Zone — convert_long_to_utm • QCkit -

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/reference/convert_utm_to_ll.html b/docs/reference/convert_utm_to_ll.html index b3c7c33..438023b 100644 --- a/docs/reference/convert_utm_to_ll.html +++ b/docs/reference/convert_utm_to_ll.html @@ -1,5 +1,5 @@ -Coordinate Conversion from UTM to Latitude and Longitude — convert_utm_to_ll • QCkitCoordinate Conversion from UTM to Latitude and Longitude — convert_utm_to_ll • QCkit -

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/reference/create_datastore_script.html b/docs/reference/create_datastore_script.html index 4eabec8..74e4ba3 100644 --- a/docs/reference/create_datastore_script.html +++ b/docs/reference/create_datastore_script.html @@ -1,5 +1,5 @@ -Turn a GitHub release into a DataStore Script Reference — create_datastore_script • QCkitExamples
-

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/reference/dot-get_unit_boundary.html b/docs/reference/dot-get_unit_boundary.html index 4433e64..4da3fbc 100644 --- a/docs/reference/dot-get_unit_boundary.html +++ b/docs/reference/dot-get_unit_boundary.html @@ -1,5 +1,5 @@ -Gets NPS unit boundaries from Arc GIS — .get_unit_boundary • QCkitGets NPS unit boundaries from Arc GIS — .get_unit_boundary • QCkit @@ -104,7 +104,7 @@

Examples

-

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/reference/fix_utc_offset.html b/docs/reference/fix_utc_offset.html index 8cd74fd..dce7455 100644 --- a/docs/reference/fix_utc_offset.html +++ b/docs/reference/fix_utc_offset.html @@ -1,5 +1,5 @@ -Fix UTC offset strings — fix_utc_offset • QCkitFix UTC offset strings — fix_utc_offset • QCkit @@ -108,7 +108,7 @@

Examples

-

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/reference/fuzz_location.html b/docs/reference/fuzz_location.html index 08ec5de..10732ac 100644 --- a/docs/reference/fuzz_location.html +++ b/docs/reference/fuzz_location.html @@ -1,5 +1,5 @@ -Convert Coordinates Into a Polygon to Obscure Specific Location — fuzz_location • QCkitExamples
-

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/reference/generate_ll_from_utm.html b/docs/reference/generate_ll_from_utm.html index bdc21ff..9f71848 100644 --- a/docs/reference/generate_ll_from_utm.html +++ b/docs/reference/generate_ll_from_utm.html @@ -1,5 +1,5 @@ -Coordinate Conversion from UTM to Latitude and Longitude — generate_ll_from_utm • QCkitCoordinate Conversion from UTM to Latitude and Longitude — generate_ll_from_utm • QCkit -

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/reference/get_columns_from_files.html b/docs/reference/get_columns_from_files.html new file mode 100644 index 0000000..08abb8b --- /dev/null +++ b/docs/reference/get_columns_from_files.html @@ -0,0 +1,127 @@ + +Retrieve all columns from each dataset and columns that occur more than once across those datasets — get_columns_from_files • QCkit + + +
+
+ + + +
+
+ + +
+

get_columns_from_files() produces two dataframes: one that lists all columns from within each of the .csv's in a specified working directory and another that lists all columns which appear more than once across those .csv's.

+
+ +
+
get_columns_from_files(wd = getwd(), common = FALSE)
+
+ +
+

Arguments

+
wd
+

String. Your specified working directory; points to the directory where the .csv files you want to work with live. I.e., getwd(), setwd("./data examples").

+ + +
common
+

Logical. Defaults to FALSE. In default status, the function returns a full dataframe of all columns within each of the files in your working directory. If set to TRUE, the function returns a single list of columns that occur more than once across all of your files.

+ +
+
+

Value

+ + +

one of two dataframes. If common set to FALSE, returns a dataframe of all columns in the files within your working directory. If common set to TRUE, returns a list of common columns across your files.

+
+
+

Details

+

get_columns_from_files() can be used as an initial step in data processing, particularly if the goal of the data processing is to merge multiple files into one, larger flat file. The function allows the user to preview and list out what columns exist within any given number of .csv's in a format that is more digestible. If the user chooses, they can also find commonalities across the columns in those files, highlighting any columns that serve as key variables upon which dataframes can then be joined.

+
+ +
+

Examples

+
if (FALSE) {
+get_columns_from_files(wd = setwd("./data examples"), common = TRUE)
+}
+
+
+
+
+ +
+ + +
+ + + + + + + + diff --git a/docs/reference/get_custom_flags.html b/docs/reference/get_custom_flags.html index ea347ac..32a5433 100644 --- a/docs/reference/get_custom_flags.html +++ b/docs/reference/get_custom_flags.html @@ -1,5 +1,5 @@ -Creates dataframe(s) summarizing data quality — get_custom_flags • QCkitExamples
-

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/reference/get_dc_flags.html b/docs/reference/get_dc_flags.html index abf7674..9ea1495 100644 --- a/docs/reference/get_dc_flags.html +++ b/docs/reference/get_dc_flags.html @@ -1,7 +1,5 @@ -Create Table of Data Quality Flags in Flagging Columns within individual -data columns — get_dc_flags • QCkitCreate Table of Data Quality Flags in Flagging Columns within individual data columns — get_dc_flags • QCkit
@@ -136,7 +133,7 @@

Examples

-

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/reference/get_df_flags.html b/docs/reference/get_df_flags.html index dfc837a..c77e72f 100644 --- a/docs/reference/get_df_flags.html +++ b/docs/reference/get_df_flags.html @@ -1,5 +1,5 @@ -Create Table of Data Quality Flags Found in Data Files within a Data Package — get_df_flags • QCkitCreate Table of Data Quality Flags Found in Data Files within a Data Package — get_df_flags • QCkit -

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/reference/get_dp_flags.html b/docs/reference/get_dp_flags.html index e797cdb..2ae4c95 100644 --- a/docs/reference/get_dp_flags.html +++ b/docs/reference/get_dp_flags.html @@ -1,5 +1,5 @@ -Create Table of Data Quality Flags Found in a Data Package — get_dp_flags • QCkitCreate Table of Data Quality Flags Found in a Data Package — get_dp_flags • QCkit -

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/reference/get_elevation.html b/docs/reference/get_elevation.html index 8bf2195..bb5a78e 100644 --- a/docs/reference/get_elevation.html +++ b/docs/reference/get_elevation.html @@ -1,5 +1,5 @@ -Add elevation to a dataset — get_elevation • QCkitAdd elevation to a dataset — get_elevation • QCkit @@ -140,7 +140,7 @@

Examples

-

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/reference/get_park_polygon.html b/docs/reference/get_park_polygon.html index ab83402..f7cf908 100644 --- a/docs/reference/get_park_polygon.html +++ b/docs/reference/get_park_polygon.html @@ -1,5 +1,5 @@ -Retrieve the polygon information for the park unit from NPS REST services — get_park_polygon • QCkitRetrieve the polygon information for the park unit from NPS REST services — get_park_polygon • QCkitTaxonomic Rank Determination Function — get_taxon_rank • QCkitTaxonomic Rank Determination Function — get_taxon_rank • QCkit @@ -116,7 +116,7 @@

Examples

-

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/reference/get_utm_zone.html b/docs/reference/get_utm_zone.html index dfe649a..ed4bdad 100644 --- a/docs/reference/get_utm_zone.html +++ b/docs/reference/get_utm_zone.html @@ -1,5 +1,5 @@ -Return UTM Zone — get_utm_zone • QCkitReturn UTM Zone — get_utm_zone • QCkitFunction reference • QCkitFunction reference • QCkit @@ -106,6 +106,10 @@

All functions generate_ll_from_utm()

Coordinate Conversion from UTM to Latitude and Longitude

+ +

get_columns_from_files()

+ +

Retrieve all columns from each dataset and columns that occur more than once across those datasets

get_custom_flags()

@@ -155,7 +159,7 @@

All functions
-

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/reference/long2UTM.html b/docs/reference/long2UTM.html index 3db772f..b4d8395 100644 --- a/docs/reference/long2UTM.html +++ b/docs/reference/long2UTM.html @@ -1,5 +1,5 @@ -Return UTM Zone — long2UTM • QCkitReturn UTM Zone — long2UTM • QCkit -

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/reference/order_cols.html b/docs/reference/order_cols.html index a649648..eb51218 100644 --- a/docs/reference/order_cols.html +++ b/docs/reference/order_cols.html @@ -1,5 +1,5 @@ -Ordering Columns Function 03-21-2023 — order_cols • QCkitOrdering Columns Function 03-21-2023 — order_cols • QCkit @@ -113,7 +113,7 @@

Examples

-

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/reference/replace_blanks.html b/docs/reference/replace_blanks.html index 10abf1c..97011e7 100644 --- a/docs/reference/replace_blanks.html +++ b/docs/reference/replace_blanks.html @@ -1,5 +1,5 @@ -Replaces all blank cells with NA — replace_blanks • QCkitReplaces all blank cells with NA — replace_blanks • QCkit @@ -117,7 +117,7 @@

Examples

-

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.9.

diff --git a/docs/reference/te_check.html b/docs/reference/te_check.html index 9558552..672d5cc 100644 --- a/docs/reference/te_check.html +++ b/docs/reference/te_check.html @@ -1,5 +1,5 @@ -Threatened Or Endangered Species Checker Function — te_check • QCkitThreatened Or Endangered Species Checker Function — te_check • QCkitCoordinate Conversion from UTM to Latitude and Longitude — utm_to_ll • QCkitCoordinate Conversion from UTM to Latitude and Longitude — utm_to_ll • QCkitCheck whether a coordinate pair is within the polygon of a park unit — validate_coord • QCkitCheck whether a coordinate pair is within the polygon of a park unit — validate_coord • QCkitTest whether decimal GPS coordinates are inside a park unit — validate_coord_list • QCkitTest whether decimal GPS coordinates are inside a park unit — validate_coord_list • QCkit