Thank you all for your solutions and comments. As Dr. Carlson mentioned, we leave rows 1 to 3 out as they are all zeroes. Then, the entries I need to select from m are
---------------- entry value ---------------- 4,1 ---> 1 5,2 ---> 2 6,3 ---> 3 7,1 ---> 1 8,2 ---> 2 9,3 ---> 3 10,4 ---> 4 11,5 ---> 5 12,1 ---> 1 Note that the entry [7,4] is zero, so we start from the first column in the 7th row and then select entry [7,1] instead. That's what I meant by "... the idea is to extract the diagonal elements until a zero is found." I should have said *entries* instead of _diagonal elements_. I am sorry Dr. Turner for the confusion. Starting with m R> m # [,1] [,2] [,3] [,4] [,5] # [1,] 0 0 0 0 0 # [2,] 0 0 0 0 0 # [3,] 0 0 0 0 0 # [4,] 1 2 3 0 0 # [5,] 1 2 3 0 0 # [6,] 1 2 3 0 0 # [7,] 1 2 3 0 0 # [8,] 1 2 3 0 0 # [9,] 1 2 3 4 0 #[10,] 1 2 3 4 0 #[11,] 1 2 3 4 5 #[12,] 1 2 3 4 5 the first submatrix to work with is # [4,] 1 2 3 0 0 # [5,] 1 2 3 0 0 # [6,] 1 2 3 0 0 from which the elements of interest are 1, 2, 3. Note that the 7th row of m is not included here because m[7, 5] = 0. Further, the second submatrix is # [7,] 1 2 3 0 0 # [8,] 1 2 3 0 0 # [9,] 1 2 3 4 0 #[10,] 1 2 3 4 0 #[11,] 1 2 3 4 5 and the corresponding elements are 1, 2, 3, 4, 5. And the last matrix is #[12,] 1 2 3 4 5 from which the position [12,1] is selected. So, the resulting entries from this process are 1, 2, 3, 1, 2, 3, 4, 5, 1. Thank you in advance for any additional insight you may provide. Regards, Jorge Velez.- On Tue, Oct 27, 2015 at 4:06 PM, David L Carlson <dcarl...@tamu.edu> wrote: > I don't see how you are getting the result you provide. > > > m > [,1] [,2] [,3] [,4] [,5] > [1,] 0 0 0 0 0 > [2,] 0 0 0 0 0 > [3,] 0 0 0 0 0 > [4,] 1 2 3 0 0 > [5,] 1 2 3 0 0 > [6,] 1 2 3 0 0 > [7,] 1 2 3 0 0 > [8,] 1 2 3 0 0 > [9,] 1 2 3 4 0 > [10,] 1 2 3 4 0 > [11,] 1 2 3 4 5 > [12,] 1 2 3 4 5 > > t(sapply(1:8, function(x) diag(m[x:12, ]))) > [,1] [,2] [,3] [,4] [,5] > [1,] 0 0 0 0 0 > [2,] 0 0 3 0 0 > [3,] 0 2 3 0 0 > [4,] 1 2 3 0 0 > [5,] 1 2 3 0 0 > [6,] 1 2 3 4 0 > [7,] 1 2 3 4 5 > [8,] 1 2 3 4 5 > > These are all of the diagonals from the 1st through 8th rows. The first 3 > begin with 0 so we leave them out, but then we have 4th: 1, 2, 3; 5th: 1, > 2, 3; 6th: 1, 2, 3, 4, etc so you must have some additional rule in mind to > get your answer. > > ------------------------------------- > David L Carlson > Department of Anthropology > Texas A&M University > College Station, TX 77840-4352 > > > > -----Original Message----- > From: R-help [mailto:r-help-boun...@r-project.org] On Behalf Of Jorge I > Velez > Sent: Tuesday, October 27, 2015 2:44 PM > To: jim holtman > Cc: R-help > Subject: Re: [R] Extract entries from matrix > > Dear Jim, > > Thank you very much for your quick reply. > > I am sorry for the confusion it may have caused, but I messed up the > indexes in my example. I would like, from the following matrix "m" > > ## input > m <- structure(c(0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, > 0L, 0L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 0L, 0L, 0L, 3L, 3L, > 3L, 3L, 3L, 3L, 3L, 3L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 4L, > 4L, 4L, 4L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 5L, 5L), .Dim = c(12L, > 5L)) > > to obtain > > 1 2 3 1 2 3 4 5 1 > > Sure using m[idx] will give the desired result. The problem is that idx is > not known and needs to be determined from "m". I would like to use > something like > > extractDiagonals(m) > ## [1] 1 2 3 1 2 3 4 5 1 > > I look forward to your reply. Thanks in advance. > > Best regards, > Jorge Velez.- > > > > On Tue, Oct 27, 2015 at 2:31 PM, jim holtman <jholt...@gmail.com> wrote: > > > If you want to use the numbers you gave a the index into the matrix, then > > you can create a matrix with the values and then index into 'm'. I don't > > see a '4' in the output example you gave using your index values: > > > > > m <- structure(c(0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, > > + 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 2L, 2L, 2L, 2L, > > + 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 0L, > > + 0L, 0L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, > > + 3L, 3L, 3L, 3L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 4L, 4L, 4L, > > + 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 0L, 0L, 0L, 0L, 0L, > > + 0L, 0L, 0L, 0L, 0L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, > > + 5L), .Dim = c(22L, 5L)) > > > # create index matrix > > > indx <- matrix(c(4, 1, > > + 5, 2, > > + 6, 3, > > + 7, 1, > > + 8, 2, > > + 9, 3, > > + 10, 1, > > + 11, 2, > > + 12, 3), ncol = 2, byrow = TRUE) > > > > > > > > > m > > [,1] [,2] [,3] [,4] [,5] > > [1,] 0 0 0 0 0 > > [2,] 0 0 0 0 0 > > [3,] 0 0 0 0 0 > > [4,] 1 2 3 0 0 > > [5,] 1 2 3 0 0 > > [6,] 1 2 3 0 0 > > [7,] 1 2 3 0 0 > > [8,] 1 2 3 0 0 > > [9,] 1 2 3 4 0 > > [10,] 1 2 3 4 0 > > [11,] 1 2 3 4 5 > > [12,] 1 2 3 4 5 > > [13,] 1 2 3 4 5 > > [14,] 1 2 3 4 5 > > [15,] 1 2 3 4 5 > > [16,] 1 2 3 4 5 > > [17,] 1 2 3 4 5 > > [18,] 1 2 3 4 5 > > [19,] 1 2 3 4 5 > > [20,] 1 2 3 4 5 > > [21,] 1 2 3 4 5 > > [22,] 1 2 3 4 5 > > > indx > > [,1] [,2] > > [1,] 4 1 > > [2,] 5 2 > > [3,] 6 3 > > [4,] 7 1 > > [5,] 8 2 > > [6,] 9 3 > > [7,] 10 1 > > [8,] 11 2 > > [9,] 12 3 > > > m[indx] > > [1] 1 2 3 1 2 3 1 2 3 > > > > > > Jim Holtman > > Data Munger Guru > > > > What is the problem that you are trying to solve? > > Tell me what you want to do, not how you want to do it. > > > > On Tue, Oct 27, 2015 at 2:43 PM, Jorge I Velez <jorgeivanve...@gmail.com > > > > wrote: > > > >> Dear R-help, > >> > >> I am working with a matrix "m" from which I would like to extract some > >> elements. An toy example is as follows: > >> > >> ## input matrix > >> m <- structure(c(0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, > >> 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 2L, 2L, 2L, 2L, > >> 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 0L, > >> 0L, 0L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, > >> 3L, 3L, 3L, 3L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 4L, 4L, 4L, > >> 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 0L, 0L, 0L, 0L, 0L, > >> 0L, 0L, 0L, 0L, 0L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, > >> 5L), .Dim = c(22L, 5L)) > >> > >> R> m > >> # [,1] [,2] [,3] [,4] [,5] > >> # [1,] 0 0 0 0 0 > >> # [2,] 0 0 0 0 0 > >> # [3,] 0 0 0 0 0 > >> # [4,] 1 2 3 0 0 > >> # [5,] 1 2 3 0 0 > >> # [6,] 1 2 3 0 0 > >> # [7,] 1 2 3 0 0 > >> # [8,] 1 2 3 0 0 > >> # [9,] 1 2 3 4 0 > >> # [10,] 1 2 3 4 0 > >> # [11,] 1 2 3 4 5 > >> # [12,] 1 2 3 4 5 > >> > >> >From "m", I would like to extract the entries > >> > >> 4, 1 > >> 5, 2 > >> 6, 3 > >> 7, 1 > >> 8, 2 > >> 9, 3 > >> 10, 1 > >> 11, 2 > >> 12, 3 > >> > >> so at the end of applying a function "f" to "m" I get > >> > >> 1, 2, 3, 1, 2, 3, 4, 1, 2, 3 > >> > >> > >> Basically the idea is to extract the diagonal elements until a zero is > >> found. > >> > >> In the real problem the dimensions of "m" are much bigger, but this > >> smaller > >> version of "m" illustrate what needs to be done. > >> > >> I would greatly appreciate any ideas on how to do this. > >> > >> Thanks in advance, > >> Jorge Velez.- > >> > >> [[alternative HTML version deleted]] > >> > >> ______________________________________________ > >> R-help@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. > >> > > > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@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. > [[alternative HTML version deleted]] ______________________________________________ R-help@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.