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

Linus Chen ||nu@@|@chen @end|ng |rom gm@||@com
Mon Oct 28 21:47:35 CET 2019


Hi Jinsong,

In such a case I think explicit loop IS the most elegant solution.
for(i in 1:2) A[,i] <- A[,i][B[,i]]

Linus

On Fri, 11 Oct 2019 at 11:44, Jinsong Zhao <jszhao using yeah.net> wrote:
>
> 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
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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