Sort one matrix based on another matrix

matrix, r

Solution

This (using a two-column integer matrix to index the matrix's two dimensions) should do the trick:

sorted <- sortMe
sorted[] <- sortMe[cbind(as.vector(sortBy), as.vector(col(sortBy)))]

Problem

I'm trying to put the rows of one matrix in the same order as the rows of another matrix of the same dimension. However I can't quite figure out how to do this without an explicit loop. It seems I should be able to do this with subsetting and an apply or Map function, but I can't figure out how to do it. Here's a toy example: ``` sortMe <- matrix(rnorm(6), ncol=2) sortBy <- matrix(c(2,1,3, 1,3,2), ncol=2) sorted <- sortMe for (i in 1:ncol(sortMe)) { sorted[,i] <- sortMe[,i][sortBy[,i]] } ``` Using this method, the resulting `sorted` matrix contains the values from `sortMe` sorted in the same order as the `sortBy` matrix. Any idea how I'd do this without the loop?

Original source