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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
\name{smartbind}
\alias{smartbind}
\title{Efficient rbind of data framesy, even if the column names don't match}
\description{
Efficient rbind of data frames, even if the column names don't match
}
\usage{
smartbind(...)
}
\arguments{
\item{\dots}{Data frames to combine}
}
\value{
The returned data frame will contain:
\item{columns}{all columns present in any provided data frame}
\item{rows}{a set of rows from each provided data frame, with values
in columns not present in the given data frame filled with missing
(\code{NA}) values.}
The data type of columns will be preserved, as long as all data frames
with a given column name agree on the data type of that column. If
the data frames disagree, the column will be converted into a
character strings. The user will need to coerce such character
columns into an appropriate type.
}
\author{Gregory R. Warnes \email{greg@warnes.net}}
\seealso{ \code{\link{rbind}}, \code{\link{cbind}} }
\examples{
df1 <- data.frame(A=1:10, B=LETTERS[1:10], C=rnorm(10) )
df2 <- data.frame(A=11:20, D=rnorm(10), E=letters[1:10] )
# rbind would fail
\dontrun{
rbind(df1, df2)
# Error in match.names(clabs, names(xi)) : names do not match previous
# names:
# D, E
}
# but smartbind combines them, appropriately creating NA entries
smartbind(df1, df2)
\dontshow{
n=10 # number of data frames to create
s=10 # number of rows in each data frame
# create a bunch of column names
names <- LETTERS[2:5]
# create a list 'Z' containing 'n' data frames, each with 3 columns
# and 's' rows. The first column is always named 'A', but the other
# two have a names randomly selected from 'names'
Z <- list()
for(i in 1:n)
{
X <- data.frame(A=sample(letters,s,replace=TRUE),
B=letters[1:s],
C=rnorm(s) )
colnames(X) <- c("A",sample(names,2,replace=FALSE))
Z[[i]] <- X
}
# Error in match.names(clabs, names(xi)) : names do not match
# previous names: E
# But smartbind will 'do the right thing'
df <- do.call("smartbind",Z)
df
}
}
% Add one or more standard keywords, see file 'KEYWORDS' in the
% R documentation directory.
\keyword{manip}
|