From 563c864091f82dc1108bdb9e2ab279048627337d Mon Sep 17 00:00:00 2001 From: AG Damsbo Date: Fri, 14 Apr 2023 11:46:09 +0200 Subject: [PATCH] a new helper function has been introduced to help matching form names when special characters are in use. --- R/REDCap_split.r | 8 ++++++-- R/read_redcap_tables.R | 5 ++--- R/utils.r | 19 +++++++++++++++++-- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/R/REDCap_split.r b/R/REDCap_split.r index f2d3497..5bd5b04 100644 --- a/R/REDCap_split.r +++ b/R/REDCap_split.r @@ -88,13 +88,17 @@ REDCap_split <- function(records, # Process user input records <- process_user_input(records) metadata <- - as.data.frame(process_user_input(metadata)) # See issue #12 + as.data.frame(process_user_input(metadata)) + + # Process repeat instrument names to match the redcap naming + records$redcap_repeat_instrument <- clean_redcap_name(records$redcap_repeat_instrument) + # Get the variable names in the dataset vars_in_data <- names(records) # Match arg for forms - forms <- match.arg(forms) + forms <- match.arg(forms, c("repeating", "all")) # Check to see if there were any repeating instruments if (forms == "repeating" && diff --git a/R/read_redcap_tables.R b/R/read_redcap_tables.R index 7841a36..9664d91 100644 --- a/R/read_redcap_tables.R +++ b/R/read_redcap_tables.R @@ -76,8 +76,7 @@ read_redcap_tables <- function(uri, # Removes any extra characters other than a-z, 0-9 and "_", to mimic raw # instrument names. if ("redcap_repeat_instrument" %in% names(d)) { - d$redcap_repeat_instrument <- - gsub("[^a-z0-9_]", "", gsub(" ", "_", tolower(d$redcap_repeat_instrument))) + d$redcap_repeat_instrument <- clean_redcap_name(d$redcap_repeat_instrument) } # Getting metadata @@ -93,7 +92,7 @@ read_redcap_tables <- function(uri, l <- REDCap_split(d, m, forms = split_forms, - primary_table_name = "nonrepeating") + primary_table_name = "") # Sanitizing split list by removing completely empty rows apart from colnames # in "generics" diff --git a/R/utils.r b/R/utils.r index b005777..398c639 100644 --- a/R/utils.r +++ b/R/utils.r @@ -83,9 +83,24 @@ focused_metadata <- function(metadata, vars_in_data) { } +#' clean_redcap_name +#' @description +#' Stepwise removal on non-alphanumeric characters, trailing white space, +#' substitutes spaces for underscores and converts to lower case. +#' Trying to make up for different naming conventions. +#' +#' @param x vector or data frame for cleaning +#' +#' @return vector or data frame, same format as input +#' @export +#' +clean_redcap_name <- function(x){ - -# function to convert the list of dataframes + gsub(" ", "_", + gsub("[' ']$","", + gsub("[^a-z0-9' '_]", "", + tolower(x) + )))} #' Sanitize list of data frames