[R] reordering of matrix rows to maximize the sum of the diagonal
Dimitris Rizopoulos
d.rizopoulos at erasmusmc.nl
Fri Apr 23 22:32:24 CEST 2010
one way is:
M <- matrix(sample(13, 9, TRUE), 3, 3)
n <- ncol(M)
ind <- apply(M, 2, which.max)
maxs <- M[cbind(ind, 1:n)]
diags <- diag(M)
diag(M) <- M[cbind(ind, 1:n)]
M[cbind(ind, 1:n)] <- diags
M
I hope it helps.
Best,
Dimitris
On 4/23/2010 10:10 PM, Jonathan wrote:
> Hi r-help community,
> This question isn't so much a syntax/coding one, but here goes:
>
> Let's say I have matrix of arbitrary dimensions and I'd like to
> reorder the rows in such a way that I could maximize the sum of the
> entries along the diagonal.
>
> For example, for this 3x3 matrix:
>
>
> [,1] [,2] [,3]
> [1,] 3 4 13
> [2,] 9 1 2
> [3,] 2 11 1
>
> rearranging the rows to maximize the sum along the diagonal would
> produce this matrix:
>
> [,1] [,2] [,3]
> [1,] 9 1 2
> [2,] 2 11 1
> [3,] 3 4 13
>
>
> I've been experimenting with some scripts of my own, but I figured I'd
> ask if one of you R-ninjas might know of an existing function (or
> algorithm I could look up and then code) that can do this somewhat
> efficiently (or even just correctly!).
>
> Best,
> Jonathan
>
> ______________________________________________
> R-help at r-project.org 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.
>
--
Dimitris Rizopoulos
Assistant Professor
Department of Biostatistics
Erasmus University Medical Center
Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands
Tel: +31/(0)10/7043478
Fax: +31/(0)10/7043014
More information about the R-help
mailing list