[R] how to use a matrix as an index to another matrix?

Jinsong Zhao j@zh@o @end|ng |rom ye@h@net
Fri Oct 11 11:43:35 CEST 2019


Hi there,

I have two matrices, A and B. The columns of B is the index of the 
corresponding columns of A. I hope to rearrange of A by B. A minimal 
example is following:

 > set.seed(123)
 > A <- matrix(sample(1:10), nrow = 5)
 > B <- matrix(c(sample(1:5), sample(1:5)), nrow =5, byrow = FALSE)
 > A
      [,1] [,2]
[1,]    3    9
[2,]   10    1
[3,]    2    7
[4,]    8    5
[5,]    6    4
 > B
      [,1] [,2]
[1,]    2    1
[2,]    3    4
[3,]    1    5
[4,]    4    3
[5,]    5    2
 > A[,1] <- A[,1][B[,1]]
 > A[,2] <- A[,2][B[,2]]
 > A
      [,1] [,2]
[1,]   10    9
[2,]    2    5
[3,]    3    4
[4,]    8    7
[5,]    6    1

My question is whether there is any elegant or generalized way to replace:

 > A[,1] <- A[,1][B[,1]]
 > A[,2] <- A[,2][B[,2]]

Thanks in advance.

PS., I know how to do the above thing by loop.

Best,
Jinsong



More information about the R-help mailing list