[R] Vectorize rearrangement within each column

Patrick Burns pburns at pburns.seanet.com
Fri Jan 19 11:53:04 CET 2007


Matrix subscripting can be used for this:

 > mb <- ma[cbind(as.vector(idx), as.vector(col(idx)))]
 > dim(mb) <- dim(ma)
 > mb
     [,1] [,2]
[1,]   10   14
[2,]   12   15
[3,]   11   13

Patrick Burns
patrick at burns-stat.com
+44 (0)20 8525 0696
http://www.burns-stat.com
(home of S Poetry and "A Guide for the Unwilling S User")

Osorio Roberto wrote:

>Consider a matrix like
>
> > ma = matrix(10:15, nr = 3)
> > ma
>      [,1] [,2]
>[1,]   10   13
>[2,]   11   14
>[3,]   12   15
>
>I want to rearrange each column according to row indexes (1 to 3)  
>given in another matrix, as in
>
> > idx = matrix(c(1,3,2, 2,3,1), nr = 3)
> > idx
>      [,1] [,2]
>[1,]    1    2
>[2,]    3    3
>[3,]    2    1
>
>The new matrix mb will have for each column the corresponding column  
>of ma indexed by the corresponding column of idx, as in
>
> > mb = ma
> > for (j in 1:2) mb[,j] = ma[idx[,j], j]	
> > mb
>      [,1] [,2]
>[1,]   10   14
>[2,]   12   15
>[3,]   11   13
>
>Can I avoid the for() loop? I'm specially interested to find out if a  
>fast implementation using lapply() would be feasible for large input  
>matrices (analogues of ma and idx) transformed into data frames.
>
>Roberto Osorio
>
>______________________________________________
>R-help at stat.math.ethz.ch 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