| unsplit {Rpdb} | R Documentation |
Reassemble Groups
Description
unsplit reverses the effect of split.
Usage
unsplit(value, f, drop = FALSE, ...)
## Default S3 method:
unsplit(value, f, drop = FALSE, ...)
Arguments
value |
a list of vectors or data frames compatible with a splitting of
|
f |
a ‘factor’ in the sense that |
drop |
logical indicating if levels that do not occur should be dropped
(if |
... |
further potential arguments passed to methods. |
Details
unsplit is a generic functions with a default method (Method dispatch
takes place based on the class of the first element of value) working
with lists of vectors or data frames (assumed to have compatible structure,
as if created by split). It puts elements or rows back in the
positions given by f. In the data frame case, row names are obtained
by unsplitting the row name vectors from the elements of value.
f is recycled as necessary and if the length of x is not a
multiple of the length of f a warning is printed.
Any missing
values in f are dropped together with the corresponding values of
x.
Value
Returns a vector or data frame for which split(x, f) equals
value
References
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
See Also
cut to categorize numeric values.
strsplit to split strings.
Examples
require(stats); require(graphics)
n <- 10; nn <- 100
g <- factor(round(n * runif(n * nn)))
x <- rnorm(n * nn) + sqrt(as.numeric(g))
xg <- split(x, g)
boxplot(xg, col = "lavender", notch = TRUE, varwidth = TRUE)
sapply(xg, length)
sapply(xg, mean)
### Calculate 'z-scores' by group (standardize to mean zero, variance one)
z <- unsplit(lapply(split(x, g), scale), g)
# or
zz <- x
split(zz, g) <- lapply(split(x, g), scale)
# and check that the within-group std dev is indeed one
tapply(z, g, sd)
tapply(zz, g, sd)
### Data frame variation
# Notice that assignment form is not used since a variable is being added
g <- airquality$Month
l <- split(airquality, g)
l <- lapply(l, transform, Oz.Z = scale(Ozone))
aq2 <- unsplit(l, g)
head(aq2)
with(aq2, tapply(Oz.Z, Month, sd, na.rm=TRUE))
### Split a matrix into a list by columns
ma <- cbind(x = 1:10, y = (-4:5)^2)
split(ma, col(ma))
split(1:10, 1:2)