# [R] repeating rows or columns within a matrix

Mike Lonergan mel at mcs.st-and.ac.uk
Fri Mar 22 11:23:09 CET 2002

```> m2<-matrix(t(cbind(mymatrix,mymatrix)),ncol=dim(mymatrix)[2],byrow=T)

seems a bit faster than mymatrix[rep(1:nrow(mymatrix), rep(2,
nrow(mymatrix))),]
(not that it matters here at all), and

> m2<-mymatrix[ceiling(1:(2*nrow(mymatrix))/2),]

much faster still. It seems rep( , rep()) is relatively expensive for this
job (though the difference is tiny in any sensible terms). I'm now even more
impressed at how cleverly R passes parameters.

Mike.

>
> mymatrix <- matrix(1:9, ncol=3)
> date()
[1] "Thu Mar 21 17:03:29 2002"
> for (i in 1:50000) {
+ m2<-mymatrix[rep(1:nrow(mymatrix), rep(2, nrow(mymatrix))),]
+ }
> m2
[,1] [,2] [,3]
[1,]    1    4    7
[2,]    1    4    7
[3,]    2    5    8
[4,]    2    5    8
[5,]    3    6    9
[6,]    3    6    9
> date()
[1] "Thu Mar 21 17:03:46 2002"
> nr <- nrow(mymatrix)
> for (i in 1:50000) {
+ m2<-mymatrix[rep(1:nr, rep(2, nr)),]
+ }
> m2
[,1] [,2] [,3]
[1,]    1    4    7
[2,]    1    4    7
[3,]    2    5    8
[4,]    2    5    8
[5,]    3    6    9
[6,]    3    6    9
> date()
[1] "Thu Mar 21 17:04:01 2002"
> for (i in 1:50000)
+ m2<-matrix(t(cbind(mymatrix,mymatrix)),ncol=dim(mymatrix)[2],byrow=T)
> m2
[,1] [,2] [,3]
[1,]    1    4    7
[2,]    1    4    7
[3,]    2    5    8
[4,]    2    5    8
[5,]    3    6    9
[6,]    3    6    9
> date()
[1] "Thu Mar 21 17:04:14 2002"
> for (i in 1:50000) {
+ myindex <- ceiling(1:(2*nrow(mymatrix))/2)
+ m2<-mymatrix[myindex,]
+ }
> m2
[,1] [,2] [,3]
[1,]    1    4    7
[2,]    1    4    7
[3,]    2    5    8
[4,]    2    5    8
[5,]    3    6    9
[6,]    3    6    9
> date()
[1] "Thu Mar 21 17:04:19 2002"
>
>

> -----Original Message-----
> From: owner-r-help at stat.math.ethz.ch
> [mailto:owner-r-help at stat.math.ethz.ch]On Behalf Of Achim Zeileis
> Sent: 21 March 2002 10:45
> To: Juhana Vartiainen
> Cc: r-help at stat.math.ethz.ch
> Subject: Re: [R] repeating rows or columns within a matrix
>
>
> Juhana Vartiainen wrote:
> >
> > Hello
> >
> > Spse I have a matrix, say
> >
> > 1 2 3
> > 4 5 6
> > 7 8 9
> >
> > and I would like to expand it by repeating rows within the
> matrix, to
> > get, if the repeating factor is 2, say:
> >
> > 123
> > 123
> > 456
> > 456
> > 789
> > 789
> >
> > (or columnwise as well) . There must be a smart way of doing that?
>
> You could do something like that:
>
> R> mymatrix <- matrix(1:9, ncol=3)
> R> myindex <- rep(1:nrow(mymatrix), rep(2, nrow(mymatrix)))
> R> mymatrix[myindex,]
>      [,1] [,2] [,3]
> [1,]    1    4    7
> [2,]    1    4    7
> [3,]    2    5    8
> [4,]    2    5    8
> [5,]    3    6    9
> [6,]    3    6    9
>
> Best,
> Z
>
> > Many thanks
> >
> > Juhana Vartiainen
> > juhana.vartiainen at labour.fi
> >
> >
> -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
> .-.-.-.-.-.-.-.-.-
> > r-help mailing list -- Read
http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
> Send "info", "help", or "[un]subscribe"
> (in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
>
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.
_._
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.
_._

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._

```