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 <jholtman at 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 <jorgeivanvelez at 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 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. >> > >[[alternative HTML version deleted]]
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-bounces at 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 <jholtman at 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 <jorgeivanvelez at 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 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. >> > >[[alternative HTML version deleted]] ______________________________________________ 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.
Maybe it's just me --- I'm notoriously slow --- but I haven't a clue what you are trying to do. You said: "... the idea is to extract the diagonal elements until a zero is found." I don't see anything that resembles a "diagonal element" (*entry*, actually; sets have elements, arrays have entries) in your desired output. What do you mean by the diagonal of a non-square matrix anyway? cheers, Rolf Turner -- Technical Editor ANZJS Department of Statistics University of Auckland Phone: +64-9-373-7599 ext. 88276 8/10/15 08:43, Jorge I Velez wrote:> 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 <jholtman at 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 <jorgeivanvelez at 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.
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 <dcarlson at 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-bounces at 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 <jholtman at 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 <jorgeivanvelez at 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 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. > >> > > > > > > [[alternative HTML version deleted]] > > ______________________________________________ > 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. >[[alternative HTML version deleted]]