[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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list