[R] How to duplicate each row in a data.frame?

William Dunlap wdunlap at tibco.com
Fri Dec 4 21:39:39 CET 2009


Phil Spector's solution is the best way to get your
triplicating job done.

As for why the result of your apply call is a 6 by
4 matrix, read the help file for apply where it talks
about how it 'simplifies' the result.  For FUN's that
do not return a scalar the simplification algorithm
may be surprising if MARGIN!=2: it cbind's the vectors
output by FUN together no matter what the value of
MARGIN was.

R : > m<-matrix(12:1,byrow=TRUE,nrow=4)
R : > m
R :      [,1] [,2] [,3]
R : [1,]   12   11   10
R : [2,]    9    8    7
R : [3,]    6    5    4
R : [4,]    3    2    1
R : > apply(m,1,function(x)x+1000)
R :      [,1] [,2] [,3] [,4]
R : [1,] 1012 1009 1006 1003
R : [2,] 1011 1008 1005 1002
R : [3,] 1010 1007 1004 1001

In addition, calling apply on a data.frame converts
it to a matrix before doing anything and that often
loses or alters information in the data.frame.  You
definitely will not get a data.frame out of apply.

apply has its uses, but it is limited.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com  

> -----Original Message-----
> From: r-help-bounces at r-project.org 
> [mailto:r-help-bounces at r-project.org] On Behalf Of Phil Spector
> Sent: Friday, December 04, 2009 12:18 PM
> To: Peng Yu
> Cc: r-help at stat.math.ethz.ch
> Subject: Re: [R] How to duplicate each row in a data.frame?
> 
> df[rep(1:nrow(df),each=3),]
> 
>  					- Phil Spector
>  					 Statistical Computing Facility
>  					 Department of Statistics
>  					 UC Berkeley
>  					 spector at stat.berkeley.edu
> 
> 
> On Fri, 4 Dec 2009, Peng Yu wrote:
> 
> > I want to duplicate each line in 'df' 3 times. But I'm confused why
> > 'z' is a 6 by 4 matrix. Could somebody let me know what the correct
> > way is to duplicate each row of a data.frame?
> >
> > df=expand.grid(x1=c('a','b'),x2=c('u','v'))
> > n=3
> > z=apply(df,1
> >    ,function(x){
> >      result=do.call(rbind,rep(list(x),n))
> >      result
> >    }
> >    )
> > z
> >
> > ______________________________________________
> > R-help at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide 
> http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
> >
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide 
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
> 




More information about the R-help mailing list