[R] Adding data.frames together

Tony Plate tplate at blackmesacapital.com
Wed Mar 10 01:21:34 CET 2004


Actually, rbind() operates on any number of arguments, as stated in the 
documentation ?rbind.  (If it only operated on pairs of arguments, the 
do.call() approach wouldn't get around that anyway.  The do.call() approach 
can be very useful when one has a list of data frames to be rbind'ed 
together, but it's not necessary when the data frames are in separate objects.)

Also, rbind() seems to cope with factor columns now - at least in the 
simple example below.  Are there other examples where it does not cope?

Here are some examples:

 > df1 <- data.frame(a=1:3,b=101:103)
 > df2 <- data.frame(a=4:5,b=104:105)
 > df3 <- data.frame(a=6,b=106)
 > rbind(df1, df2, df3)
    a   b
1  1 101
2  2 102
3  3 103
11 4 104
21 5 105
12 6 106
 > df1 <- data.frame(a=1:3,b=letters[1:3])
 > df2 <- data.frame(a=4:5,b=letters[4:5])
 > df <- rbind(df1, df2)
 > sapply(df, class)
         a         b
"integer"  "factor"
 > df
    a b
1  1 a
2  2 b
3  3 c
11 4 d
21 5 e
 >

-- Tony Plate

At Tuesday 05:00 PM 3/9/2004, Tom Blackwell wrote:
>John  -
>
>The function  rbind()  operates on pairs of data frames, and
>(somewhat arcane and definitely NOT for beginning users)
>
>    do.call("rbind", list(df1, df2, df3, df4, df5)))
>
>will combine any number (in this case 5) of data frames.
>
>As of February 2003, the  do.call()  approach did not deal
>gracefully with columns in a data frame which had been
>converted to factors (happens by default in  read.table()).
>In my own code I had to go through some gyrations to protect
>against that.
>
>For futher information on the  do.call()  approach, search
>the r-help archives for "do.call" AND "rbind".  In particular,
>there was a thread involving jerosenb and rpeng titled
>"[R] quotes within quotes" with one email dated Wed, 9 Apr 2003.
>
>-  tom blackwell  -  u michigan medical school  -  ann arbor  -
>
>On Tue, 9 Mar 2004, John Sweval wrote:
>
> > I have a series of data frames that are identical structurally, i.e. -
> > made with the same code, but I need to add them together so that they
> > become one, longer, data frame, i.e. - each of the slot vectors are
> > increased in length by the length of the added data frame vectors.
> >
> > So if I have df1 with a slot A so that length(df1$A) = 100 and I have
> > df2 with a slot A so that length(df2$A)=200 then I need a method to
> > create df3 its slot A is the df1$A plus df2$A such that length(df3$A) =
> > 300.
> >
> > It does not appear that if you use data.frame to join two data frames it
> > just adds the slots of both sources to the destination data frame and
> > that is not what I want.
> >
> > In my finally solution, I need to do this with multiple data.frames that
> > slot-wise are identical, but each slot length is different between data
> > frames.
> >
> > Seems like there should be an easy solution, but I just have not
> > stumbled across it in the documentation.
> >
> > Thanks,
> > John C. Sweval
> >   Database Architect
> >   Illumigen Biosciences, Inc.
> >     Email: jsweval at illumigen.com
> >     Phone: 206-378-0400
> >     Fax: 206-378-0408
> >
>
>______________________________________________
>R-help at stat.math.ethz.ch mailing list
>https://www.stat.math.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html




More information about the R-help mailing list