epi_stats_tidy: Tidy up a data.frame with summary values

View source: R/epi_stats_tidy.R

epi_stats_tidyR Documentation

Tidy up a data.frame with summary values

Description

epi_stats_tidy() cleans up the output from epi_stats_summary() and epi_stats_numeric(). Values are rounded to digits (default is 2). format(x, nsmall = digits) is used to ensure xx.00 are printed. Ordering uses as.numeric(as.character(x)) as 'percent' or other numeric column is assumed to be the preferred option. 'decreasing' is passed to order.

Usage

epi_stats_tidy(
  sum_df = NULL,
  order_by = "percent",
  perc_n = NULL,
  digits = 2,
  decreasing = TRUE
)

Arguments

sum_df

Data.frame with summary to clean up.

order_by

Column to order results by. Default is 'percent'.

perc_n

Number of rows from original dataframe to calculate percentage. Must be passed manually.

digits

= 2,

decreasing

Sort values by decreasing order. Default is TRUE.

Value

Returns a dataframe as a tibble with values ordered and spread. Adds row sums and percentage.

Note

Note that format() will likely change the class type.

Author(s)

Antonio J Berlanga-Taylor <\url{https://github.com/AntonioJBT/episcout}>

See Also

epi_stats_summary, epi_stats_format, epi_stats_numeric.

Examples

#####
# Load libraries needed:
library(episcout)
library(dplyr)
library(purrr)
library(e1071)
library(tibble)
library(tidyr)
#####

#####
# Generate a data frame:
n <- 1000
df <- data.frame(
  var_id = rep(1:(n / 2), each = 2),
  var_to_rep = rep(c("Pre", "Post"), n / 2),
  x = rnorm(n),
  y = rbinom(n, 1, 0.50),
  z = rpois(n, 2)
)

# Explore first and last rows for first columns:
epi_head_and_tail(df)

# Add character/factor columns:
col_chr <- data.frame(
  "chr1" = rep(c("A", "B"), length.out = 1000),
  "chr2" = rep(c("C", "D"), length.out = 1000)
)
dim(col_chr)
df_cont_chr <- tibble::as.tibble(cbind(df, col_chr))
epi_head_and_tail(df_cont_chr)
epi_head_and_tail(df_cont_chr, last_cols = TRUE)

# Check variable types are what you expect:
epi_clean_count_classes(df_cont_chr)
str(df_cont_chr)
dim(df_cont_chr)
# var_id, y and z can be treated as factors or characters.
summary(as.factor(df_cont_chr$y))
summary(as.factor(df_cont_chr$z))
# Here we'll only transform y though:
df_cont_chr$y <- as.factor(df_cont_chr$y)
epi_clean_count_classes(df_cont_chr)
str(df_cont_chr)

# Designate some values as codes to be counted separately:
codes <- c("Pre", "A", "C", "1", "3")
#####

#####
# Count when codes are present, pass these as character or factor, specify
#  action is to count codes only:
stat_sum1 <- epi_stats_summary(
  df = df_cont_chr,
  codes = codes,
  class_type = "chr_fct",
  action = "codes_only"
)
class(stat_sum1)
stat_sum1
#####

#####
# Add total for percentage calculation and order column to tidy up results:
perc_n <- nrow(df_cont_chr)
order_by <- "percent"
stat_sum_tidy <- epi_stats_tidy(
  sum_df = stat_sum1,
  order_by = order_by,
  perc_n = perc_n
)
stat_sum_tidy
# Format them if needed:
epi_stats_format(stat_sum_tidy, digits = 0)
epi_stats_format(stat_sum_tidy, digits = 2)
#####

#####
# Count integer or numeric codes:
stat_sum2 <- epi_stats_summary(df_cont_chr,
  codes = codes,
  class_type = "int_num",
  action = "codes_only"
)
stat_sum2
# Tidy and format them:
stat_sum_tidy <- epi_stats_tidy(
  sum_df = stat_sum2,
  order_by = order_by,
  perc_n = perc_n
)
stat_sum_tidy
epi_stats_format(stat_sum_tidy, digits = 0)
epi_stats_format(stat_sum_tidy, digits = 2, skip = c(2, 3))
#####

#####
# Get summary stats excluding contingency codes for character and factor columns:
stat_sum3 <- epi_stats_summary(df_cont_chr,
  codes = codes,
  class_type = "chr_fct",
  action = "exclude"
)
stat_sum3
# Tidy and format:
stat_sum_tidy <- epi_stats_tidy(
  sum_df = stat_sum3,
  order_by = order_by,
  perc_n = perc_n
)
stat_sum_tidy
epi_stats_format(stat_sum_tidy, digits = 0)
epi_stats_format(stat_sum_tidy, digits = 1)
#####

#####
# Get summary stats for numeric/integer columns
# while excluding certain codes/values:
stat_sum4 <- epi_stats_summary(
  df = df_cont_chr,
  codes = codes,
  class_type = "int_num",
  action = "exclude"
)
class(stat_sum4)
stat_sum4
# Numeric data summary doesn't need tidying but could be formatted:
epi_stats_format(stat_sum4, digits = 2)
#####

#####
# If there are no codes to return the result is an empty data.frame (tibble):
codes <- c("Per", "X", "55")
stat_sum_zero <- epi_stats_summary(df_cont_chr,
  codes = codes,
  class_type = "chr_fct",
  action = "codes_only"
)
stat_sum_zero
#####

AntonioJBT/episcout documentation built on June 11, 2025, 7:26 p.m.