Hi Dimitris, This code is very helpful, although I note that the columns are not preserved, ie if
> M <- matrix(sample(13, 9, TRUE), 3, 3) produces: > M [,1] [,2] [,3] [1,] 13 9 2 [2,] 10 1 12 [3,] 11 6 7 then > 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 produces > M [,1] [,2] [,3] [1,] 13 1 2 [2,] 10 9 7 [3,] 11 6 12 The diagonal is maximized, but the rows are no longer the same. For example, row 1 of the original matrix was 13 9 2, and in the second matrix, it is 13 1 2. I'm looking to conserve the rows, but only reorder them vertically. Thanks, Jonathan On Fri, Apr 23, 2010 at 4:32 PM, Dimitris Rizopoulos <d.rizopou...@erasmusmc.nl> wrote: > 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@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 > ______________________________________________ R-help@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.