blob: 62dd6ed22501f0542b87d192cfa0ac3bec3c5664 [file] [log] [blame]
% File src/library/utils/man/stack.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2017 R Core Team
% Distributed under GPL 2 or later
\name{stack}
\alias{stack}
\alias{stack.default}
\alias{stack.data.frame}
\alias{unstack}
\alias{unstack.default}
\alias{unstack.data.frame}
\title{Stack or Unstack Vectors from a Data Frame or List}
\description{
Stacking vectors concatenates multiple vectors into a single vector
along with a factor indicating where each observation originated.
Unstacking reverses this operation.
}
\usage{
stack(x, \dots)
\method{stack}{default}(x, drop=FALSE, \dots)
\method{stack}{data.frame}(x, select, drop=FALSE, \dots)
unstack(x, \dots)
\method{unstack}{default}(x, form, \dots)
\method{unstack}{data.frame}(x, form, \dots)
}
\arguments{
\item{x}{a list or data frame to be stacked or unstacked.}
\item{select}{an expression, indicating which variable(s) to select from a
data frame.}
\item{form}{a two-sided formula whose left side evaluates to the
vector to be unstacked and whose right side evaluates to the
indicator of the groups to create. Defaults to \code{\link{formula}(x)}
in the data frame method for \code{unstack}.}
\item{drop}{Whether to drop the unused levels from the \dQuote{ind}
column of the return value.
}
\item{\dots}{further arguments passed to or from other methods.}
}
\details{
The \code{stack} function is used to transform data available as
separate columns in a data frame or list into a single column that can
be used in an analysis of variance model or other linear model. The
\code{unstack} function reverses this operation.
Note that \code{stack} applies to \emph{vectors} (as determined by
\code{\link{is.vector}}): non-vector columns (e.g., factors) will be
ignored with a warning. Where vectors of different types are selected
they are concatenated by \code{\link{unlist}} whose help page explains
how the type of the result is chosen.
These functions are generic: the supplied methods handle data frames
and objects coercible to lists by \code{\link{as.list}}.
}
\value{
\code{unstack} produces a list of columns according to the formula
\code{form}. If all the columns have the same length, the resulting
list is coerced to a data frame.
\code{stack} produces a data frame with two columns:
\item{values}{the result of concatenating the selected vectors in
\code{x}.}
\item{ind}{a factor indicating from which vector in \code{x} the
observation originated.}
}
\author{Douglas Bates}
\seealso{
\code{\link{lm}}, \code{\link{reshape}}
}
\examples{
require(stats)
formula(PlantGrowth) # check the default formula
pg <- unstack(PlantGrowth) # unstack according to this formula
pg
stack(pg) # now put it back together
stack(pg, select = -ctrl) # omitting one vector
}
\keyword{manip}