unsplit: Reassemble Groups

View source: R/unsplit.R

unsplitR Documentation

Reassemble Groups


unsplit reverses the effect of split.


unsplit(value, f, drop = FALSE, ...)

## Default S3 method:
unsplit(value, f, drop = FALSE, ...)



a list of vectors or data frames compatible with a splitting of x. Recycling applies if the lengths do not match.


a ‘factor’ in the sense that as.factor(f) defines the grouping, or a list of such factors in which case their interaction is used for the grouping.


logical indicating if levels that do not occur should be dropped (if f is a factor or a list).


further potential arguments passed to methods.


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.


Returns a vector or data frame for which split(x, f) equals value


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.


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)
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)

Rpdb documentation built on Sept. 28, 2023, 5:07 p.m.