File: smartbind.Rd

package info (click to toggle)
gtools 2.6.2-1
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 328 kB
  • ctags: 5
  • sloc: asm: 127; ansic: 69; makefile: 1
file content (74 lines) | stat: -rw-r--r-- 2,214 bytes parent folder | download
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}