基于另一个矩阵对一个矩阵排序

JD *_*ong 5 r matrix

我试图将一个矩阵的行放在与相同维度的另一个矩阵的行相同的顺序中.但是,如果没有显式循环,我无法弄清楚如何做到这一点.似乎我应该能够通过子集和应用或Map功能来实现这一点,但我无法弄清楚如何做到这一点.

这是一个玩具示例:

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]]
}
Run Code Online (Sandbox Code Playgroud)

使用此方法,结果sorted矩阵包含sortMe以与sortBy矩阵相同的顺序排序的值.知道如何在没有循环的情况下做到这一点吗?

Jos*_*ien 8

这(使用两列整数矩阵来索引矩阵的两个维度)应该可以解决这个问题:

sorted <- sortMe
sorted[] <- sortMe[cbind(as.vector(sortBy), as.vector(col(sortBy)))]
Run Code Online (Sandbox Code Playgroud)