[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