From 82f440ecab4889a6a25394936c39c8898b33b048 Mon Sep 17 00:00:00 2001 From: hillarymarler Date: Wed, 21 Aug 2024 09:43:04 -0400 Subject: [PATCH 1/3] Update UnitConversions.R --- R/UnitConversions.R | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/R/UnitConversions.R b/R/UnitConversions.R index 5e3a2ef6..3e4f6d03 100644 --- a/R/UnitConversions.R +++ b/R/UnitConversions.R @@ -430,6 +430,8 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { MeasureUnitCode.match)) %>% dplyr::left_join(wqx.ref, by = dplyr::join_by(MeasureUnitCode.match)) %>% dplyr::select(-MeasureUnitCode.match) %>% + dplyr::distinct() %>% + dplyr::left_join(usgs.spec, by = dplyr::join_by(ResultMeasure.MeasureUnitCode)) %>% dplyr::distinct() } @@ -446,7 +448,7 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { # ref join ref.join <- c( - "TADA.CharacteristicName", #"TADA.MethodSpeciationName", + "TADA.CharacteristicName", "TADA.MethodSpeciationName", "ResultMeasure.MeasureUnitCode", "TADA.ResultMeasure.MeasureUnitCode" ) @@ -504,7 +506,7 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { # Convert method speciation column for USGS data check <- clean.data %>% - dplyr::filter(ResultMeasure.MeasureUnitCode %in% usgs.ref$ResultMeasure.MeasureUnitCode) + dplyr::filter(ResultMeasure.MeasureUnitCode %in% usgs.ref$Code) if (dim(check)[1] > 0) { print(paste0("NOTE: Dataset contains ", dim(check)[1], " USGS results with speciation information in both the result unit and method speciation columns. This function overwrites the TADA method speciation column with the speciation provided in the result unit column.")) @@ -536,7 +538,7 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { # Transform TADA.DetectionQuantitationLimitMeasure.MeasureValue value to target value only if target unit exists det.data <- clean.data %>% dplyr::select(-tidyselect::any_of(conversion.cols)) %>% - dplyr::left_join(det.ref, by = det.join) %>% + dplyr::left_join(det.ref, by = det.join, relationship = "many-to-many") %>% # apply conversions where there is a target unit, use original value if no target unit dplyr::mutate(TADA.DetectionQuantitationLimitMeasure.MeasureValue = dplyr::case_when( !is.na(TADA.Target.ResultMeasure.MeasureUnitCode) ~ ((TADA.DetectionQuantitationLimitMeasure.MeasureValue - TADA.WQXUnitConversionCoefficient) * TADA.WQXUnitConversionFactor), From ee7d81c10714c10d4097f08b29a9b4ae847a4f98 Mon Sep 17 00:00:00 2001 From: hillarymarler Date: Mon, 26 Aug 2024 18:14:44 -0400 Subject: [PATCH 2/3] Update UnitConversions.R Bug fix for ref = wqx --- R/UnitConversions.R | 110 ++++++++++++++++++++++---------------------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/R/UnitConversions.R b/R/UnitConversions.R index 3e4f6d03..e5a65192 100644 --- a/R/UnitConversions.R +++ b/R/UnitConversions.R @@ -296,7 +296,7 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { # check transform is boolean TADA_CheckType(transform, "logical") # check .data has all of the required columns - + expected_cols <- c( "TADA.CharacteristicName", "TADA.ActivityMediaName", @@ -305,11 +305,11 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { "TADA.DetectionQuantitationLimitMeasure.MeasureValue", "TADA.DetectionQuantitationLimitMeasure.MeasureUnitCode" ) - + TADA_CheckColumns(.data, expected_cols) - + # execute function after checks are passed - + # import USGS ref for method speciation usgs.ref <- TADA_GetUSGSSynonymRef() @@ -343,35 +343,35 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { "TADA.Target.ResultMeasure.MeasureUnitCode", "TADA.WQXUnitConversionFactor", "TADA.WQXUnitConversionCoefficient" ) - + if (all(expected_ref_cols %in% colnames(ref)) == FALSE) { stop("The reference data frame does not contain all fields required for TADA_ConvertResultUnits. Use TADA_CreateUnitRef with the TADA data frame to create an editable unit reference table with all required columns.") - + if (all(expected_ref_cols %in% colnames(ref)) == TRUE) { print("The reference data frame contains all fields required for TADA_ConvertResultUnits.") } } - + # join USGS ref for method speciation name information unit.ref <- ref %>% dplyr::left_join(usgs.spec, by = dplyr::join_by(ResultMeasure.MeasureUnitCode)) %>% dplyr::distinct() - + # create message to inform users if user-supplied unit reference contains all combinations present in TADA data frame # create list of unique characteristic and unit combinations in data tada.list <- TADA_CreateUnitRef(.data) %>% dplyr::select(TADA.CharacteristicName, TADA.ResultMeasure.MeasureUnitCode) %>% dplyr::distinct() - + # create list of unique characteristic and unit combinations in user-supplied unit ref user.list <- unit.ref %>% dplyr::select(TADA.CharacteristicName, TADA.ResultMeasure.MeasureUnitCode) %>% dplyr::distinct() - + # compare the unique characteristic/unit combinations in data nd unit ref compare.ref <- tada.list %>% dplyr::anti_join(user.list, by = c("TADA.CharacteristicName", "TADA.ResultMeasure.MeasureUnitCode")) - + # if no difference between the two, print message that all combinations are present in unit ref if (nrow(compare.ref) == 0) { print("All CharacteristicName/Unit combinations in the TADA dataframe are represented in user-supplied unit reference.") @@ -383,15 +383,15 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { dplyr::select(CombList) %>% dplyr::distinct() %>% stringi::stri_replace_last(fixed = ",", " and") - + print(paste("TADA_ConvertResultUnits: The following CharacteristicName and ResultMeasure.MeasureUnitCode combinations are not included in the user-supplied unit reference data frame: ", - compare.list, - ". Consider revising the user-supplied unit reference data frame and running TADA_ConvertResultUnits again.", - sep = "" + compare.list, + ". Consider revising the user-supplied unit reference data frame and running TADA_ConvertResultUnits again.", + sep = "" )) } } - + # if user did not provide a data frame if (!is.data.frame(ref)) { # if no unit reference df was provided by user or user input was "tada" @@ -402,11 +402,11 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { dplyr::left_join(usgs.spec, by = dplyr::join_by(ResultMeasure.MeasureUnitCode)) %>% dplyr::distinct() } - + if (ref == "wqx") { # import WQX unit ref wqx.ref <- TADA_GetMeasureUnitRef() - + wqx.ref <- wqx.ref %>% dplyr::mutate(Target.Unit = toupper(Target.Unit), Code = toupper(Code)) %>% @@ -421,7 +421,7 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { TADA.WQXUnitConversionFactor, TADA.WQXUnitConversionCoefficient ) %>% dplyr::distinct() - + # create unit ref unit.ref <- TADA_UniqueCharUnitSpeciation(.data) %>% dplyr::left_join(usgs.unit, by = dplyr::join_by(TADA.ResultMeasure.MeasureUnitCode)) %>% @@ -430,42 +430,46 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { MeasureUnitCode.match)) %>% dplyr::left_join(wqx.ref, by = dplyr::join_by(MeasureUnitCode.match)) %>% dplyr::select(-MeasureUnitCode.match) %>% - dplyr::distinct() %>% + dplyr::distinct() + + unit.ref <- unit.ref %>% dplyr::left_join(usgs.spec, by = dplyr::join_by(ResultMeasure.MeasureUnitCode)) %>% + dplyr::select(-TADA.MethodSpeciationName) %>% dplyr::distinct() - - } + } - + } + # list of conversion columns - + conversion.cols <- c( "TADA.SpeciationUnitConversion", "TADA.WQXTargetUnit", "TADA.WQXUnitConversionFactor", "TADA.WQXUnitConversionCoefficient", "TADA.Target.MethodSpeciationName", "TADA.Target.ResultMeasure.MeasureUnitCode" ) - + # ref join - + ref.join <- c( - "TADA.CharacteristicName", "TADA.MethodSpeciationName", - "ResultMeasure.MeasureUnitCode", "TADA.ResultMeasure.MeasureUnitCode" + "TADA.CharacteristicName", + "ResultMeasure.MeasureUnitCode", + "TADA.ResultMeasure.MeasureUnitCode" ) - + # join unit.ref to .data check.data <- .data %>% # remove existing conversion columns dplyr::select(-tidyselect::any_of(c(conversion.cols))) %>% # add new conversion columns dplyr::left_join(unit.ref, - by = - c( - ref.join - ), - relationship = "many-to-many" + by = + c( + ref.join + ), + relationship = "many-to-many" ) - + # add TADA.WQXResultUnitConversion column flag.data <- check.data %>% # create flag column @@ -474,16 +478,16 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { is.na(TADA.ResultMeasureValue) ~ as.character("No Result Value"), is.na(TADA.Target.ResultMeasure.MeasureUnitCode) ~ as.character("No Target Unit") )) - + if (transform == FALSE) { print("TADA_ConvertResultUnits: When Transform = FALSE, result values and units are NOT converted. Conversions are required for many other TADA functions to work properly (such as result value range checks).") # reorder columns clean.data <- TADA_OrderCols(flag.data) %>% TADA_CreateComparableID() - + return(clean.data) } - + if (transform == TRUE) { # Transform result measure value to Target Unit only if target unit exists clean.data <- flag.data %>% @@ -493,9 +497,9 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { !is.na(TADA.Target.ResultMeasure.MeasureUnitCode) ~ ((TADA.ResultMeasureValue + TADA.WQXUnitConversionCoefficient) * TADA.WQXUnitConversionFactor), is.na(TADA.Target.ResultMeasure.MeasureUnitCode) ~ TADA.ResultMeasureValue )) - + rm(flag.data) - + # populate TADA.ResultMeasure.MeasureUnitCode clean.data <- clean.data %>% # use target unit where there is a target unit, use original unit if no target unit @@ -503,26 +507,21 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { !is.na(TADA.Target.ResultMeasure.MeasureUnitCode) ~ TADA.Target.ResultMeasure.MeasureUnitCode, is.na(TADA.Target.ResultMeasure.MeasureUnitCode) ~ TADA.ResultMeasure.MeasureUnitCode )) - + # Convert method speciation column for USGS data check <- clean.data %>% - dplyr::filter(ResultMeasure.MeasureUnitCode %in% usgs.ref$Code) - + dplyr::filter(ResultMeasure.MeasureUnitCode %in% usgs.ref$ResultMeasure.MeasureUnitCode) + if (dim(check)[1] > 0) { print(paste0("NOTE: Dataset contains ", dim(check)[1], " USGS results with speciation information in both the result unit and method speciation columns. This function overwrites the TADA method speciation column with the speciation provided in the result unit column.")) } - + # add target method speciation name when needed clean.data <- clean.data %>% dplyr::mutate(TADA.MethodSpeciationName = ifelse(!is.na(TADA.Target.MethodSpeciationName), TADA.Target.MethodSpeciationName, toupper(TADA.MethodSpeciationName)), # replace UNKNOWN or NONE method speciation name with NA TADA.MethodSpeciationName = ifelse(TADA.MethodSpeciationName %in% c("UNKNOWN", "NONE"), NA, TADA.MethodSpeciationName)) - # create new comparable data identifier column following conversion - clean.data <- TADA_CreateComparableID(clean.data) - - clean.data <- TADA_OrderCols(clean.data) - # create detection unit ref det.ref <- unit.ref %>% dplyr::ungroup() %>% @@ -534,19 +533,19 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { "TADA.CharacteristicName", "DetectionQuantitationLimitMeasure.MeasureUnitCode" ) - + # Transform TADA.DetectionQuantitationLimitMeasure.MeasureValue value to target value only if target unit exists det.data <- clean.data %>% dplyr::select(-tidyselect::any_of(conversion.cols)) %>% - dplyr::left_join(det.ref, by = det.join, relationship = "many-to-many") %>% + dplyr::left_join(det.ref, by = det.join) %>% # apply conversions where there is a target unit, use original value if no target unit dplyr::mutate(TADA.DetectionQuantitationLimitMeasure.MeasureValue = dplyr::case_when( !is.na(TADA.Target.ResultMeasure.MeasureUnitCode) ~ ((TADA.DetectionQuantitationLimitMeasure.MeasureValue - TADA.WQXUnitConversionCoefficient) * TADA.WQXUnitConversionFactor), is.na(TADA.Target.ResultMeasure.MeasureUnitCode) ~ TADA.DetectionQuantitationLimitMeasure.MeasureValue )) - + rm(clean.data) - + # populate TADA.DetectionQuantitationLimitMeasure.MeasureUnitCode convert.data <- det.data %>% # use target unit where there is a target unit, use original unit if no target unit @@ -555,12 +554,13 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { is.na(TADA.Target.ResultMeasure.MeasureUnitCode) ~ TADA.DetectionQuantitationLimitMeasure.MeasureUnitCode )) %>% TADA_OrderCols() - + # Remove unneccessary conversion columns convert.data <- convert.data %>% dplyr::select(-tidyselect::any_of(conversion.cols)) %>% + TADA_OrderCols() %>% TADA_CreateComparableID() - + return(convert.data) } } From cd42f7a6decc569ed1919bc4adee5ece599565e3 Mon Sep 17 00:00:00 2001 From: hillarymarler Date: Wed, 28 Aug 2024 09:08:08 -0400 Subject: [PATCH 3/3] Update UnitConversions.R Styler updates --- R/UnitConversions.R | 161 +++++++++++++++++++++++--------------------- 1 file changed, 83 insertions(+), 78 deletions(-) diff --git a/R/UnitConversions.R b/R/UnitConversions.R index bcdd090e..b9af0a1d 100644 --- a/R/UnitConversions.R +++ b/R/UnitConversions.R @@ -303,59 +303,59 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { # create uppercase version of original CharacteristicName .data$TADA.CharacteristicName <- toupper(.data$CharacteristicName) } - + if ("TADA.ActivityMediaName" %in% colnames(.data)) { .data <- .data } else { # create uppercase version of original ActivityMediaName .data$TADA.ActivityMediaName <- toupper(.data$ActivityMediaName) - } - + } + if ("TADA.MethodSpeciationName" %in% colnames(.data)) { .data <- .data } else { # create uppercase version of original MethodSpeciationName .data$TADA.MethodSpeciationName <- toupper(.data$MethodSpeciationName) } - + if ("TADA.ResultSampleFractionText" %in% colnames(.data)) { .data <- .data } else { # create uppercase version of original ResultSampleFractionText .data$TADA.ResultSampleFractionText <- toupper(.data$ResultSampleFractionText) } - + if ("TADA.ResultMeasureValue" %in% colnames(.data)) { .data <- .data } else { # run TADA_ConvertSpecialChars function .data <- TADA_ConvertSpecialChars(.data, "ResultMeasureValue") - } - + } + if ("TADA.ResultMeasure.MeasureUnitCode" %in% colnames(.data)) { .data <- .data } else { # create uppercase version of original ResultMeasure.MeasureUnitCode .data$TADA.ResultMeasure.MeasureUnitCode <- toupper(.data$ResultMeasure.MeasureUnitCode) - } - + } + if ("TADA.DetectionQuantitationLimitMeasure.MeasureValue" %in% colnames(.data)) { .data <- .data } else { # run TADA_ConvertSpecialChars function .data <- TADA_ConvertSpecialChars(.data, "DetectionQuantitationLimitMeasure.MeasureValue") - } - + } + if ("TADA.DetectionQuantitationLimitMeasure.MeasureUnitCode" %in% colnames(.data)) { .data <- .data } else { # create uppercase version of original DetectionQuantitationLimitMeasure.MeasureUnitCode .data$TADA.DetectionQuantitationLimitMeasure.MeasureUnitCode <- toupper(.data$DetectionQuantitationLimitMeasure.MeasureUnitCode) - } - + } + expected_cols <- c( - "TADA.CharacteristicName", + "TADA.CharacteristicName", "TADA.ActivityMediaName", "TADA.MethodSpeciationName", "TADA.ResultSampleFractionText", @@ -364,14 +364,14 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { "TADA.DetectionQuantitationLimitMeasure.MeasureValue", "TADA.DetectionQuantitationLimitMeasure.MeasureUnitCode" ) - + TADA_CheckColumns(.data, expected_cols) - + # execute function after checks are passed - + # import USGS ref for method speciation usgs.ref <- TADA_GetUSGSSynonymRef() - + usgs.spec <- usgs.ref %>% dplyr::rename( ResultMeasure.MeasureUnitCode = Code, @@ -383,7 +383,7 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { TADA.Target.MethodSpeciationName = toupper(TADA.Target.MethodSpeciationName) ) %>% dplyr::select(ResultMeasure.MeasureUnitCode, TADA.Target.MethodSpeciationName) - + usgs.unit <- usgs.ref %>% dplyr::select(Code, CodeNoSpeciation) %>% dplyr::mutate( @@ -392,47 +392,47 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { ) %>% dplyr::select(-Code) %>% dplyr::rename(MeasureUnitCode.match = CodeNoSpeciation) - - + + # if user supplied unit reference was provided if (is.data.frame(ref)) { # required columns expected_ref_cols <- c( - "TADA.CharacteristicName", + "TADA.CharacteristicName", "TADA.ResultMeasure.MeasureUnitCode", "TADA.Target.ResultMeasure.MeasureUnitCode", - "TADA.WQXUnitConversionFactor", + "TADA.WQXUnitConversionFactor", "TADA.WQXUnitConversionCoefficient" ) - + if (all(expected_ref_cols %in% colnames(ref)) == FALSE) { stop("The reference data frame does not contain all fields required for TADA_ConvertResultUnits. Use TADA_CreateUnitRef with the TADA data frame to create an editable unit reference table with all required columns.") - + if (all(expected_ref_cols %in% colnames(ref)) == TRUE) { print("The reference data frame contains all fields required for TADA_ConvertResultUnits.") } } - + # join USGS ref for method speciation name information unit.ref <- ref %>% dplyr::left_join(usgs.spec, by = dplyr::join_by(ResultMeasure.MeasureUnitCode)) %>% dplyr::distinct() - + # create message to inform users if user-supplied unit reference contains all combinations present in TADA data frame # create list of unique characteristic and unit combinations in data tada.list <- TADA_CreateUnitRef(.data) %>% dplyr::select(TADA.CharacteristicName, TADA.ResultMeasure.MeasureUnitCode) %>% dplyr::distinct() - + # create list of unique characteristic and unit combinations in user-supplied unit ref user.list <- unit.ref %>% dplyr::select(TADA.CharacteristicName, TADA.ResultMeasure.MeasureUnitCode) %>% dplyr::distinct() - + # compare the unique characteristic/unit combinations in data nd unit ref compare.ref <- tada.list %>% dplyr::anti_join(user.list, by = c("TADA.CharacteristicName", "TADA.ResultMeasure.MeasureUnitCode")) - + # if no difference between the two, print message that all combinations are present in unit ref if (nrow(compare.ref) == 0) { print("All CharacteristicName/Unit combinations in the TADA dataframe are represented in user-supplied unit reference.") @@ -444,33 +444,35 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { dplyr::select(CombList) %>% dplyr::distinct() %>% stringi::stri_replace_last(fixed = ",", " and") - + print(paste("TADA_ConvertResultUnits: The following CharacteristicName and ResultMeasure.MeasureUnitCode combinations are not included in the user-supplied unit reference data frame: ", - compare.list, - ". Consider revising the user-supplied unit reference data frame and running TADA_ConvertResultUnits again.", - sep = "" + compare.list, + ". Consider revising the user-supplied unit reference data frame and running TADA_ConvertResultUnits again.", + sep = "" )) } } - + # if user did not provide a data frame if (!is.data.frame(ref)) { # if no unit reference df was provided by user or user input was "tada" if (ref == "tada") { unit.ref <- TADA_CreateUnitRef(.data, print.message = FALSE) - + unit.ref <- unit.ref %>% dplyr::left_join(usgs.spec, by = dplyr::join_by(ResultMeasure.MeasureUnitCode)) %>% dplyr::distinct() } - + if (ref == "wqx") { # import WQX unit ref wqx.ref <- TADA_GetMeasureUnitRef() - + wqx.ref <- wqx.ref %>% - dplyr::mutate(Target.Unit = toupper(Target.Unit), - Code = toupper(Code)) %>% + dplyr::mutate( + Target.Unit = toupper(Target.Unit), + Code = toupper(Code) + ) %>% dplyr::rename( MeasureUnitCode.match = Code, TADA.Target.ResultMeasure.MeasureUnitCode = Target.Unit, @@ -482,13 +484,14 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { TADA.WQXUnitConversionFactor, TADA.WQXUnitConversionCoefficient ) %>% dplyr::distinct() - + # create unit ref unit.ref <- TADA_UniqueCharUnitSpeciation(.data) %>% dplyr::left_join(usgs.unit, by = dplyr::join_by(TADA.ResultMeasure.MeasureUnitCode)) %>% - dplyr::mutate(MeasureUnitCode.match = ifelse(is.na(MeasureUnitCode.match), - TADA.ResultMeasure.MeasureUnitCode, - MeasureUnitCode.match)) %>% + dplyr::mutate(MeasureUnitCode.match = ifelse(is.na(MeasureUnitCode.match), + TADA.ResultMeasure.MeasureUnitCode, + MeasureUnitCode.match + )) %>% dplyr::left_join(wqx.ref, by = dplyr::join_by(MeasureUnitCode.match)) %>% dplyr::select(-MeasureUnitCode.match) %>% dplyr::distinct() @@ -497,40 +500,39 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { dplyr::left_join(usgs.spec, by = dplyr::join_by(ResultMeasure.MeasureUnitCode)) %>% dplyr::select(-TADA.MethodSpeciationName) %>% dplyr::distinct() - } } # list of conversion columns - + conversion.cols <- c( "TADA.SpeciationUnitConversion", "TADA.WQXTargetUnit", "TADA.WQXUnitConversionFactor", "TADA.WQXUnitConversionCoefficient", "TADA.Target.MethodSpeciationName", "TADA.Target.ResultMeasure.MeasureUnitCode" ) - + # ref join - + ref.join <- c( "TADA.CharacteristicName", - "ResultMeasure.MeasureUnitCode", + "ResultMeasure.MeasureUnitCode", "TADA.ResultMeasure.MeasureUnitCode" ) - - + + # join unit.ref to .data check.data <- .data %>% # remove existing conversion columns dplyr::select(-tidyselect::any_of(c(conversion.cols))) %>% # add new conversion columns dplyr::left_join(unit.ref, - by = - c( - ref.join - ), - relationship = "many-to-many" - ) - + by = + c( + ref.join + ), + relationship = "many-to-many" + ) + # add TADA.WQXResultUnitConversion column flag.data <- check.data %>% # create flag column @@ -539,16 +541,16 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { is.na(TADA.ResultMeasureValue) ~ as.character("No Result Value"), is.na(TADA.Target.ResultMeasure.MeasureUnitCode) ~ as.character("No Target Unit") )) - + if (transform == FALSE) { print("TADA_ConvertResultUnits: When Transform = FALSE, result values and units are NOT converted. Conversions are required for many other TADA functions to work properly (such as result value range checks).") # reorder columns clean.data <- TADA_OrderCols(flag.data) %>% TADA_CreateComparableID() - + return(clean.data) } - + if (transform == TRUE) { # Transform result measure value to Target Unit only if target unit exists clean.data <- flag.data %>% @@ -558,9 +560,9 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { !is.na(TADA.Target.ResultMeasure.MeasureUnitCode) ~ ((TADA.ResultMeasureValue + TADA.WQXUnitConversionCoefficient) * TADA.WQXUnitConversionFactor), is.na(TADA.Target.ResultMeasure.MeasureUnitCode) ~ TADA.ResultMeasureValue )) - + rm(flag.data) - + # populate TADA.ResultMeasure.MeasureUnitCode clean.data <- clean.data %>% # use target unit where there is a target unit, use original unit if no target unit @@ -568,20 +570,22 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { !is.na(TADA.Target.ResultMeasure.MeasureUnitCode) ~ TADA.Target.ResultMeasure.MeasureUnitCode, is.na(TADA.Target.ResultMeasure.MeasureUnitCode) ~ TADA.ResultMeasure.MeasureUnitCode )) - + # Convert method speciation column for USGS data check <- clean.data %>% dplyr::filter(ResultMeasure.MeasureUnitCode %in% usgs.ref$ResultMeasure.MeasureUnitCode) - + if (dim(check)[1] > 0) { print(paste0("NOTE: Dataset contains ", dim(check)[1], " USGS results with speciation information in both the result unit and method speciation columns. This function overwrites the TADA method speciation column with the speciation provided in the result unit column.")) } - + # add target method speciation name when needed clean.data <- clean.data %>% - dplyr::mutate(TADA.MethodSpeciationName = ifelse(!is.na(TADA.Target.MethodSpeciationName), TADA.Target.MethodSpeciationName, toupper(TADA.MethodSpeciationName)), - # replace UNKNOWN or NONE method speciation name with NA - TADA.MethodSpeciationName = ifelse(TADA.MethodSpeciationName %in% c("UNKNOWN", "NONE"), NA, TADA.MethodSpeciationName)) + dplyr::mutate( + TADA.MethodSpeciationName = ifelse(!is.na(TADA.Target.MethodSpeciationName), TADA.Target.MethodSpeciationName, toupper(TADA.MethodSpeciationName)), + # replace UNKNOWN or NONE method speciation name with NA + TADA.MethodSpeciationName = ifelse(TADA.MethodSpeciationName %in% c("UNKNOWN", "NONE"), NA, TADA.MethodSpeciationName) + ) # create detection unit ref det.ref <- unit.ref %>% @@ -589,12 +593,12 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { dplyr::rename(DetectionQuantitationLimitMeasure.MeasureUnitCode = ResultMeasure.MeasureUnitCode) %>% dplyr::select(-TADA.ResultMeasure.MeasureUnitCode) %>% dplyr::distinct() - + det.join <- c( "TADA.CharacteristicName", "DetectionQuantitationLimitMeasure.MeasureUnitCode" ) - + # Transform TADA.DetectionQuantitationLimitMeasure.MeasureValue value to target value only if target unit exists det.data <- clean.data %>% dplyr::select(-tidyselect::any_of(conversion.cols)) %>% @@ -604,24 +608,25 @@ TADA_ConvertResultUnits <- function(.data, ref = "tada", transform = TRUE) { !is.na(TADA.Target.ResultMeasure.MeasureUnitCode) ~ ((TADA.DetectionQuantitationLimitMeasure.MeasureValue - TADA.WQXUnitConversionCoefficient) * TADA.WQXUnitConversionFactor), is.na(TADA.Target.ResultMeasure.MeasureUnitCode) ~ TADA.DetectionQuantitationLimitMeasure.MeasureValue )) - + rm(clean.data) - + # populate TADA.DetectionQuantitationLimitMeasure.MeasureUnitCode convert.data <- det.data %>% # use target unit where there is a target unit, use original unit if no target unit dplyr::mutate(TADA.DetectionQuantitationLimitMeasure.MeasureUnitCode = dplyr::case_when( !is.na(TADA.Target.ResultMeasure.MeasureUnitCode) ~ TADA.Target.ResultMeasure.MeasureUnitCode, - is.na(TADA.Target.ResultMeasure.MeasureUnitCode) ~ TADA.DetectionQuantitationLimitMeasure.MeasureUnitCode)) - + is.na(TADA.Target.ResultMeasure.MeasureUnitCode) ~ TADA.DetectionQuantitationLimitMeasure.MeasureUnitCode + )) + # Remove unneccessary conversion columns convert.data <- convert.data %>% dplyr::select(-tidyselect::any_of(conversion.cols)) - - + + # Update ID and column ordering convert.data <- TADA_CreateComparableID(convert.data) - convert.data <- TADA_OrderCols(convert.data) + convert.data <- TADA_OrderCols(convert.data) return(convert.data) }