repeating rows or columns within a matrix
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 _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._