Hi all, I have a large square matrix (60 x 60) and found it hard to visualize. Is it possible to change it as shown below? Sample example (3 x 3) A B C A 3 4 5 B 4 7 8 C 5 8 9 Desired output A A 3 A B 4 A C 5 B B 7 B C 8 C C 9 Thank you in advance
On 16/07/2016 6:25 PM, Ashta wrote: > Hi all, > > I have a large square matrix (60 x 60) and found it hard to > visualize. Is it possible to change it as shown below? > > Sample example (3 x 3) > > A B C > A 3 4 5 > B 4 7 8 > C 5 8 9 > > Desired output > A A 3 > A B 4 > A C 5 > B B 7 > B C 8 > C C 9 Yes, use matrix indexing. I don't think the 3600 values are going to be very easy to read, but here's how to produce them: m <- matrix(1:3600, 60, 60) indices <- expand.grid(row = 1:60, col = 1:60) cbind(indices$row, indices$col, m[as.matrix(indices)]) Duncan Murdoch
I'm not sure what the OP is looking for in the first two columns, but he does seem to be looking for only the diagonal and super-diagonal elements. Here's some code that makes output that looks similar to the "Desired output": mat1 <- matrix(rbind(c(3, 4, 5), c(4, 7, 8), c(5, 8, 9)), nrow=3) colnames(mat1) <- c('A', 'B', 'C') rownames(mat1) <- c('A', 'B', 'C') mat1 col3 <- mat1[row(mat1) >= col(mat1)] idx12 <- which(row(mat1) >= col(mat1), arr.ind=TRUE) desiredOutput <- cbind(idx12[ , 2], idx12[ , 1], col3) desiredOutput #### If you really want 'A', 'B', 'C' col1 <- colnames(mat1)[idx12[ , 2]] col1 col2 <- rownames(mat1)[idx12[ , 1]] col2 desiredOutput <- cbind(col1, col2, col3) desiredOutput -- Mike On Sat, Jul 16, 2016 at 4:39 PM, Duncan Murdoch <murdoch.duncan at gmail.com> wrote:> On 16/07/2016 6:25 PM, Ashta wrote: >> Hi all, >> >> I have a large square matrix (60 x 60) and found it hard to >> visualize. Is it possible to change it as shown below? >> >> Sample example (3 x 3) >> >> A B C >> A 3 4 5 >> B 4 7 8 >> C 5 8 9 >> >> Desired output >> A A 3 >> A B 4 >> A C 5 >> B B 7 >> B C 8 >> C C 9 > > Yes, use matrix indexing. I don't think the 3600 values are going to be > very easy to read, but here's how to produce them: > > m <- matrix(1:3600, 60, 60) > indices <- expand.grid(row = 1:60, col = 1:60) > cbind(indices$row, indices$col, m[as.matrix(indices)]) > > Duncan Murdoch > > > ______________________________________________ > R-help at 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.
On 07/17/2016 01:39 AM, Duncan Murdoch wrote:> On 16/07/2016 6:25 PM, Ashta wrote: > > Hi all, > > > > I have a large square matrix (60 x 60) and found it hard to > > visualize. Is it possible to change it as shown below? > > > > Sample example (3 x 3) > > > > A B C > > A 3 4 5 > > B 4 7 8 > > C 5 8 9 > > > > Desired output > > A A 3 > > A B 4 > > A C 5 > > B B 7 > > B C 8 > > C C 9 > > Yes, use matrix indexing. I don't think the 3600 values are going to be > very easy to read, but here's how to produce them: > > m <- matrix(1:3600, 60, 60) > indices <- expand.grid(row = 1:60, col = 1:60) > cbind(indices$row, indices$col, m[as.matrix(indices)]) >Or use as.data.frame.table(): m <- matrix(1:9, 3, 3, dimnames = list(dimA = letters[1:3], dimB = letters[1:3])) m as.data.frame.table(m, responseName = "value") --- I do not know what you mean by "visualize", but image() or heatmap() are good starting points if you need a plot of the values. If you really need to inspect the raw values, you can try interactive (scrollable) tables, e.g.: library(DT) m <- provideDimnames(matrix(1:3600, 60, 60)) datatable(m, options = list(pageLength = 60)) Cheers, Denes> Duncan Murdoch > > ______________________________________________ > R-help at 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.