R/ds.frequency.R

Defines functions ds.frequency

Documented in ds.frequency

#' @title 
#' Barplot parameters
#'  
#' @description
#' This function calculates the frequencies and the relative frequencies of factors/characters of the input dataset.
#' 
#' @usage ds.frequency(data, select = NULL, tojson = FALSE)
#' 
#' @param data A vector, matrix or data frame which includes at least one factor/character.
#' @param select Select one or more specific nominal variables to calculate their corresponding frequencies, 
#' if it's not specified the result corresponds to frequencies of every factor variable in the data.
#' @param tojson If TRUE the results are returned in json format, default returns a list
#' 
#' @details 
#' This function returns a list with the frequencies and relative frequencies of factors/characters 
#' of the input dataset.
#' 
#' @author Kleanthis Koupidis, Charalampos Bratsas
#'
#' @seealso \code{\link{ds.analysis}}, \code{\link{open_spending.ds}}
#'  
#' @examples 
#' # iris data frame as an input and a selected column to calculate its frequencies
#' ds.frequency(iris, select = "Species", tojson = FALSE)
#' 
#' # iris data frame as an input without a selected column and json output
#' ds.frequency(iris, tojson = TRUE)
#' 
#' # OpenBudgets.eu Dataset Example:
#' ds.frequency(Wuppertal_df, select = "Produkt", tojson = FALSE)
#' 
#' @rdname ds.frequency
#' 
#' @export
#' 

ds.frequency <- function(data, select = NULL, tojson = FALSE) {
  
  data <- as.data.frame(data)
  stopifnot(all(sapply(data, is.numeric)) == FALSE)
  factors <- which(sapply(data, is.factor) | sapply(data, is.character))
  factors.names <- names(factors)
  
  if (is.null(select)) {
    selection <- factors.names
  } else if (is.null(select) == FALSE) {
    selection <- match.arg(select, factors.names, several.ok = TRUE)
  }
  
  data <- data[selection]
  freq <- lapply(data, table)
  relative.freq <- lapply(freq, prop.table)
  
  if(is.list(freq)) {
    freq <- lapply(freq, as.data.frame)
    relative.freq <- lapply(relative.freq, as.data.frame)
  } else {
    freq <- as.data.frame(freq)
    relative.freq <- as.data.frame(relative.freq)
  }
  
  freq.parameters <- list(
    frequencies = freq,
    relative.frequencies = relative.freq)
  
  if (tojson == TRUE) {
    freq.parameters <- jsonlite::toJSON(freq.parameters)
  }
  
  # Return
  return(freq.parameters)
}

Try the DescriptiveStats.OBeu package in your browser

Any scripts or data that you put into this service are public.

DescriptiveStats.OBeu documentation built on May 4, 2020, 9:06 a.m.