From 9130084295e34a03f8f2660e5e193ad9ad2ce253 Mon Sep 17 00:00:00 2001 From: Joran Elias Date: Wed, 2 Apr 2014 10:06:34 -0600 Subject: [PATCH 1/6] Allow specification of row/column label for margins other than "(all)". --- R/cast.r | 16 +++++++++------- R/helper-margins.r | 7 ++++--- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/R/cast.r b/R/cast.r index 79255cd..6e828ed 100644 --- a/R/cast.r +++ b/R/cast.r @@ -30,9 +30,11 @@ #' identify a single observation for each output cell. Defaults to length #' (with a message) if needed but not specified. #' @param ... further arguments are passed to aggregating function -#' @param margins vector of variable names (can include "grand\_col" and -#' "grand\_row") to compute margins for, or TRUE to compute all margins . -#' Any variables that can not be margined over will be silently dropped. +#' @param margins vector of variable names to compute margins for, or TRUE +#' to compute all margins. Any variables that can not be margined over will +#' be silently dropped. +#' @param margin_label character label for margin total rows and columns. +#' Default to "(all)". #' @param subset quoted expression used to subset data prior to reshaping, #' e.g. \code{subset = .(variable=="length")}. #' @param fill value with which to fill in structural missings, defaults to @@ -164,7 +166,7 @@ cast <- function(data, formula, fun.aggregate = NULL, ..., subset = NULL, fill = #' @rdname cast #' @export -dcast <- function(data, formula, fun.aggregate = NULL, ..., margins = NULL, subset = NULL, fill=NULL, drop = TRUE, value.var = guess_value(data)) { +dcast <- function(data, formula, fun.aggregate = NULL, ..., margins = NULL, margin_label = "(all)", subset = NULL, fill=NULL, drop = TRUE, value.var = guess_value(data)) { formula <- parse_formula(formula, names(data), value.var) if (length(formula) > 2) { @@ -172,7 +174,7 @@ dcast <- function(data, formula, fun.aggregate = NULL, ..., margins = NULL, subs } if (!is.null(margins)) { - data <- add_margins(data, lapply(formula, names), margins) + data <- add_margins(data, lapply(formula, names), margins, margin_label) } res <- cast(data, formula, fun.aggregate, ..., @@ -188,12 +190,12 @@ dcast <- function(data, formula, fun.aggregate = NULL, ..., margins = NULL, subs #' @rdname cast #' @export -acast <- function(data, formula, fun.aggregate = NULL, ..., margins = NULL, subset = NULL, fill=NULL, drop = TRUE, value.var = guess_value(data)) { +acast <- function(data, formula, fun.aggregate = NULL, ..., margins = NULL, margin_label = "(all)", subset = NULL, fill=NULL, drop = TRUE, value.var = guess_value(data)) { formula <- parse_formula(formula, names(data), value.var) if (!is.null(margins)) { - data <- add_margins(data, lapply(formula, names), margins) + data <- add_margins(data, lapply(formula, names), margins, margin_label) } res <- cast(data, formula, fun.aggregate, ..., diff --git a/R/helper-margins.r b/R/helper-margins.r index 56e65d4..46b19f3 100644 --- a/R/helper-margins.r +++ b/R/helper-margins.r @@ -55,8 +55,9 @@ downto <- function(a, b) { #' dimension #' @param margins a character vector of variable names to compute margins for. #' \code{TRUE} will compute all possible margins. +#' @param margin_label character label for margin rows; defaults to "(all)". #' @export -add_margins <- function(df, vars, margins = TRUE) { +add_margins <- function(df, vars, margins = TRUE, margin_label = "(all)") { margin_vars <- margins(vars, margins) # Return data frame if no margining necessary @@ -65,7 +66,7 @@ add_margins <- function(df, vars, margins = TRUE) { # Prepare data frame for addition of margins addAll <- function(x) { x <- addNA(x, TRUE) - factor(x, levels = c(levels(x), "(all)"), exclude = NULL) + factor(x, levels = c(levels(x), margin_label), exclude = NULL) } vars <- unique(unlist(margin_vars)) df[vars] <- lapply(df[vars], addAll) @@ -75,7 +76,7 @@ add_margins <- function(df, vars, margins = TRUE) { # Loop through all combinations of margin variables, setting # those variables to (all) margin_dfs <- llply(margin_vars, function(vars) { - df[vars] <- rep(list(factor("(all)")), length(vars)) + df[vars] <- rep(list(factor(margin_label)), length(vars)) df }) From faf4b030a3764c4e67758acf55837f64648dfe0e Mon Sep 17 00:00:00 2001 From: Joran Elias Date: Wed, 2 Apr 2014 10:15:40 -0600 Subject: [PATCH 2/6] re-oxygenize --- man/add_margins.Rd | 6 ++++-- man/cast.Rd | 16 +++++++++------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/man/add_margins.Rd b/man/add_margins.Rd index 1c1f3d8..3d0c14f 100644 --- a/man/add_margins.Rd +++ b/man/add_margins.Rd @@ -1,9 +1,8 @@ -% Generated by roxygen2 (4.0.0): do not edit by hand \name{add_margins} \alias{add_margins} \title{Add margins to a data frame.} \usage{ -add_margins(df, vars, margins = TRUE) +add_margins(df, vars, margins = TRUE, margin_label = "(all)") } \arguments{ \item{df}{input data frame} @@ -14,6 +13,9 @@ add_margins(df, vars, margins = TRUE) \item{margins}{a character vector of variable names to compute margins for. \code{TRUE} will compute all possible margins.} + + \item{margin_label}{character label for margin rows; + defaults to "(all)".} } \description{ Rownames are silently stripped. All margining variables will be converted diff --git a/man/cast.Rd b/man/cast.Rd index 54908cc..36eca45 100644 --- a/man/cast.Rd +++ b/man/cast.Rd @@ -1,4 +1,3 @@ -% Generated by roxygen2 (4.0.0): do not edit by hand \name{cast} \alias{acast} \alias{cast} @@ -7,11 +6,11 @@ Cast a molten data frame into an array or data frame.} \usage{ dcast(data, formula, fun.aggregate = NULL, ..., margins = NULL, - subset = NULL, fill = NULL, drop = TRUE, + margin_label = "(all)", subset = NULL, fill = NULL, drop = TRUE, value.var = guess_value(data)) acast(data, formula, fun.aggregate = NULL, ..., margins = NULL, - subset = NULL, fill = NULL, drop = TRUE, + margin_label = "(all)", subset = NULL, fill = NULL, drop = TRUE, value.var = guess_value(data)) } \arguments{ @@ -28,10 +27,13 @@ acast(data, formula, fun.aggregate = NULL, ..., margins = NULL, \item{...}{further arguments are passed to aggregating function} - \item{margins}{vector of variable names (can include - "grand\_col" and "grand\_row") to compute margins for, or - TRUE to compute all margins . Any variables that can not - be margined over will be silently dropped.} + \item{margins}{vector of variable names to compute + margins for, or TRUE to compute all margins. Any + variables that can not be margined over will be silently + dropped.} + + \item{margin_label}{character label for margin total rows + and columns. Default to "(all)".} \item{subset}{quoted expression used to subset data prior to reshaping, e.g. \code{subset = From c3e7556ebbde324ee855a40516e34eaf203ae2a4 Mon Sep 17 00:00:00 2001 From: Joran Elias Date: Wed, 2 Apr 2014 10:58:32 -0600 Subject: [PATCH 3/6] Make argument consistent with others by using . rather than _ --- R/cast.r | 10 +++++----- R/helper-margins.r | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/R/cast.r b/R/cast.r index 6e828ed..b2ae65f 100644 --- a/R/cast.r +++ b/R/cast.r @@ -33,7 +33,7 @@ #' @param margins vector of variable names to compute margins for, or TRUE #' to compute all margins. Any variables that can not be margined over will #' be silently dropped. -#' @param margin_label character label for margin total rows and columns. +#' @param margin.label character label for margin total rows and columns. #' Default to "(all)". #' @param subset quoted expression used to subset data prior to reshaping, #' e.g. \code{subset = .(variable=="length")}. @@ -166,7 +166,7 @@ cast <- function(data, formula, fun.aggregate = NULL, ..., subset = NULL, fill = #' @rdname cast #' @export -dcast <- function(data, formula, fun.aggregate = NULL, ..., margins = NULL, margin_label = "(all)", subset = NULL, fill=NULL, drop = TRUE, value.var = guess_value(data)) { +dcast <- function(data, formula, fun.aggregate = NULL, ..., margins = NULL, margin.label = "(all)", subset = NULL, fill=NULL, drop = TRUE, value.var = guess_value(data)) { formula <- parse_formula(formula, names(data), value.var) if (length(formula) > 2) { @@ -174,7 +174,7 @@ dcast <- function(data, formula, fun.aggregate = NULL, ..., margins = NULL, marg } if (!is.null(margins)) { - data <- add_margins(data, lapply(formula, names), margins, margin_label) + data <- add_margins(data, lapply(formula, names), margins, margin.label) } res <- cast(data, formula, fun.aggregate, ..., @@ -190,12 +190,12 @@ dcast <- function(data, formula, fun.aggregate = NULL, ..., margins = NULL, marg #' @rdname cast #' @export -acast <- function(data, formula, fun.aggregate = NULL, ..., margins = NULL, margin_label = "(all)", subset = NULL, fill=NULL, drop = TRUE, value.var = guess_value(data)) { +acast <- function(data, formula, fun.aggregate = NULL, ..., margins = NULL, margin.label = "(all)", subset = NULL, fill=NULL, drop = TRUE, value.var = guess_value(data)) { formula <- parse_formula(formula, names(data), value.var) if (!is.null(margins)) { - data <- add_margins(data, lapply(formula, names), margins, margin_label) + data <- add_margins(data, lapply(formula, names), margins, margin.label) } res <- cast(data, formula, fun.aggregate, ..., diff --git a/R/helper-margins.r b/R/helper-margins.r index 46b19f3..95a7e7a 100644 --- a/R/helper-margins.r +++ b/R/helper-margins.r @@ -57,7 +57,7 @@ downto <- function(a, b) { #' \code{TRUE} will compute all possible margins. #' @param margin_label character label for margin rows; defaults to "(all)". #' @export -add_margins <- function(df, vars, margins = TRUE, margin_label = "(all)") { +add_margins <- function(df, vars, margins = TRUE, margin.label = "(all)") { margin_vars <- margins(vars, margins) # Return data frame if no margining necessary @@ -66,7 +66,7 @@ add_margins <- function(df, vars, margins = TRUE, margin_label = "(all)") { # Prepare data frame for addition of margins addAll <- function(x) { x <- addNA(x, TRUE) - factor(x, levels = c(levels(x), margin_label), exclude = NULL) + factor(x, levels = c(levels(x), margin.label), exclude = NULL) } vars <- unique(unlist(margin_vars)) df[vars] <- lapply(df[vars], addAll) From 73bf92b10167c1fbddca3aea13708a791f82f40d Mon Sep 17 00:00:00 2001 From: Joran Elias Date: Wed, 2 Apr 2014 10:59:18 -0600 Subject: [PATCH 4/6] re-oxygenize --- man/cast.Rd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/man/cast.Rd b/man/cast.Rd index 36eca45..841cb00 100644 --- a/man/cast.Rd +++ b/man/cast.Rd @@ -6,11 +6,11 @@ Cast a molten data frame into an array or data frame.} \usage{ dcast(data, formula, fun.aggregate = NULL, ..., margins = NULL, - margin_label = "(all)", subset = NULL, fill = NULL, drop = TRUE, + margin.label = "(all)", subset = NULL, fill = NULL, drop = TRUE, value.var = guess_value(data)) acast(data, formula, fun.aggregate = NULL, ..., margins = NULL, - margin_label = "(all)", subset = NULL, fill = NULL, drop = TRUE, + margin.label = "(all)", subset = NULL, fill = NULL, drop = TRUE, value.var = guess_value(data)) } \arguments{ @@ -32,7 +32,7 @@ acast(data, formula, fun.aggregate = NULL, ..., margins = NULL, variables that can not be margined over will be silently dropped.} - \item{margin_label}{character label for margin total rows + \item{margin.label}{character label for margin total rows and columns. Default to "(all)".} \item{subset}{quoted expression used to subset data prior From 03009bd67e26203bc387b692621f3d5ccd18ebcb Mon Sep 17 00:00:00 2001 From: Joran Elias Date: Wed, 2 Apr 2014 10:59:18 -0600 Subject: [PATCH 5/6] re-oxygenize --- R/helper-margins.r | 2 +- man/add_margins.Rd | 4 ++-- man/cast.Rd | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/R/helper-margins.r b/R/helper-margins.r index 95a7e7a..1771bfa 100644 --- a/R/helper-margins.r +++ b/R/helper-margins.r @@ -55,7 +55,7 @@ downto <- function(a, b) { #' dimension #' @param margins a character vector of variable names to compute margins for. #' \code{TRUE} will compute all possible margins. -#' @param margin_label character label for margin rows; defaults to "(all)". +#' @param margin.label character label for margin rows; defaults to "(all)". #' @export add_margins <- function(df, vars, margins = TRUE, margin.label = "(all)") { margin_vars <- margins(vars, margins) diff --git a/man/add_margins.Rd b/man/add_margins.Rd index 3d0c14f..3162b7c 100644 --- a/man/add_margins.Rd +++ b/man/add_margins.Rd @@ -2,7 +2,7 @@ \alias{add_margins} \title{Add margins to a data frame.} \usage{ -add_margins(df, vars, margins = TRUE, margin_label = "(all)") +add_margins(df, vars, margins = TRUE, margin.label = "(all)") } \arguments{ \item{df}{input data frame} @@ -14,7 +14,7 @@ add_margins(df, vars, margins = TRUE, margin_label = "(all)") compute margins for. \code{TRUE} will compute all possible margins.} - \item{margin_label}{character label for margin rows; + \item{margin.label}{character label for margin rows; defaults to "(all)".} } \description{ diff --git a/man/cast.Rd b/man/cast.Rd index 36eca45..841cb00 100644 --- a/man/cast.Rd +++ b/man/cast.Rd @@ -6,11 +6,11 @@ Cast a molten data frame into an array or data frame.} \usage{ dcast(data, formula, fun.aggregate = NULL, ..., margins = NULL, - margin_label = "(all)", subset = NULL, fill = NULL, drop = TRUE, + margin.label = "(all)", subset = NULL, fill = NULL, drop = TRUE, value.var = guess_value(data)) acast(data, formula, fun.aggregate = NULL, ..., margins = NULL, - margin_label = "(all)", subset = NULL, fill = NULL, drop = TRUE, + margin.label = "(all)", subset = NULL, fill = NULL, drop = TRUE, value.var = guess_value(data)) } \arguments{ @@ -32,7 +32,7 @@ acast(data, formula, fun.aggregate = NULL, ..., margins = NULL, variables that can not be margined over will be silently dropped.} - \item{margin_label}{character label for margin total rows + \item{margin.label}{character label for margin total rows and columns. Default to "(all)".} \item{subset}{quoted expression used to subset data prior From 9cf1ada8916004fe8bc299d24b0fb3e645cd738e Mon Sep 17 00:00:00 2001 From: Joran Elias Date: Thu, 3 Apr 2014 09:42:24 -0600 Subject: [PATCH 6/6] Forgot an underscore --- R/helper-margins.r | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/helper-margins.r b/R/helper-margins.r index 1771bfa..0b4492a 100644 --- a/R/helper-margins.r +++ b/R/helper-margins.r @@ -76,7 +76,7 @@ add_margins <- function(df, vars, margins = TRUE, margin.label = "(all)") { # Loop through all combinations of margin variables, setting # those variables to (all) margin_dfs <- llply(margin_vars, function(vars) { - df[vars] <- rep(list(factor(margin_label)), length(vars)) + df[vars] <- rep(list(factor(margin.label)), length(vars)) df })