1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
# Ensure that the data frame contains a grouping variable.
#
# If the \code{group} variable is not present, then a new group
# variable is generated from the interaction of all discrete (factor or
# character) vectors, excluding \code{label}.
#
# @param data.frame
# @value data.frame with group variable
# @keyword internal
add_group <- function(data) {
if (empty(data)) return(data)
if (is.null(data$group)) {
disc <- vapply(data, is.discrete, logical(1))
disc[names(disc) == "label"] <- FALSE
if (any(disc)) {
data$group <- id(data[disc], drop = TRUE)
} else {
data$group <- 1L
}
} else {
data$group <- id(data["group"], drop = TRUE)
}
data
}
order_groups <- function(data) {
if (is.null(data$order)) return(data)
data[order(data$order), ]
}
|