R/data_wrangling.R

#' multi.fun
#'
#' Combined function for summary statistics
#'
#' @param x column of values for which to calculate statistics
#' @keywords summary
#' @export
#' @examples
#' multi.fun(x)

multi.fun <- function(x) {
  c(min = min(x), mean = mean(x), max = max(x), sd = sd(x))
}

#' Create summary of a graphene curve fit data frame
#'
#' Takes the results of gRdata_read and computes summary statistics
#'
#' @importFrom magrittr %>%
#' @param df Computes summary (min, mean, max and sd) for \code{df}
#' @keywords summary
#' @family curve fit functions
#' @export
#' @examples
#' gr_cf_summary(df_cf)

gr_cf_summary <- function(df) {
  df_summary <- df %>%
    dplyr::select(-x, -y, -id) %>%
    purrr::map(multi.fun) %>%
    tibble::as_tibble()

  df_summary <- dplyr::bind_cols(dplyr::tibble(key = c('min', 'mean', 'max', 'sd')), df_summary)

  df_summary
}


#' Saves summary statistics for graphene curve fit
#'
#' Saves the summary df to a csv file (default name is summary.csv)
#'
#' @importFrom magrittr %>%
#' @param df_summary Dataframe containing summary statistics
#' @param filename Filename of csv file (defaults to summary.csv)
#' @keywords summary
#' @family curve fit functions
#' @export
#' @examples
#' gr_cf_summary_save(df_summary)
gr_cf_summary_save <- function(df_summary, filename = 'summary.csv') {
  readr::write_excel_csv(data_summary, filename)
}


#' Calculate average raman spectrum from a full map
#'
#' Calculates the average spectrum from df created by \code{gr_map_read()}
#'
#' @importFrom magrittr %>%
#' @param df_map A tidy dataframe generated by \code{gr_map_read()}
#' @param normalise Logical determining whether spectra are normalised before averaging. Defaults to FALSE.
#' @keywords Average, map, raman, spectrum
#' @export
#' @examples
#' gr_map_avg()

gr_map_avg <- function(df_map, normalise = FALSE) {
  df_map_avg <- df_map %>%
    dplyr::select(-x, -y) %>%
    dplyr::mutate(id = 1:n()) %>%
    tidyr::gather(key = wavenumber, value = intensity, convert = TRUE, -id)

  if (normalise == TRUE) {
  df_map_avg <- df_map_avg %>%
    dplyr::group_by(id) %>%
    dplyr::mutate(intensity = intensity / max(intensity)) %>%
    dplyr::ungroup()
  }

  df_map_avg %>%
    dplyr::group_by(wavenumber) %>%
    dplyr::summarise(intensity = mean(intensity))
}
emilbp/gRaphene documentation built on May 16, 2019, 5:07 a.m.