Thank you, Jeff, for your message. I did a search, but maybe my problem was that I didn't know the correct way to search my problem (in other words: my vocabulary in R/English is not good). Because of this I choose to send a message to the list the most detailed as possible, and with a first solution, that was not the optimum one.
Thank you very much for taking your time to think about my problem and to search for a good solution! I much appreciate it! But I think John' suggestion does what I need and it is much simpler :) Best, Charles P.S.: the HTML issue is probably because I am using a webmail-client and I did a copy and paste from the first email I sent. On Fri, Oct 31, 2014 at 3:15 PM, Jeff Newmiller <jdnew...@dcn.davis.ca.us> wrote: > Thank you for the reproducible example, but posting in HTML can corrupt > your example code so please learn to set your email client mail format > appropriately when posting to this list. > > I think this [1] post, found with a quick Google search for "R match > matrix", fits your situation perfectly. > > match(data.frame(t(B)), data.frame(t(A))) > > Note that concatenating vectors in loops is bad news... a basic > optimization for your code would be to preallocate a logical result vector > and fill in each element with a TRUE/FALSE in the outer loop, and use the > which() function on that completed vector to identify the index numbers (if > you really need that). For example: > > lresult <- rep( NA, nrow(A) ) > for ( ia in seq.int( nrow( A ) ) ) { > lres <- FALSE > ib <- 0 > while ( ib < nrow( B ) & !lres ) { > ib <- ib + 1 > lres <- all( A[ ia, ] == B[ ib, ] ) > } > lresult[ ia ] <- lres > } > result <- which( lresult ) > > [1] > http://stackoverflow.com/questions/12697122/in-r-match-function-for-rows-or-columns-of-matrix > --------------------------------------------------------------------------- > Jeff Newmiller The ..... ..... Go Live... > DCN:<jdnew...@dcn.davis.ca.us> Basics: ##.#. ##.#. Live > Go... > Live: OO#.. Dead: OO#.. Playing > Research Engineer (Solar/Batteries O.O#. #.O#. with > /Software/Embedded Controllers) .OO#. .OO#. rocks...1k > --------------------------------------------------------------------------- > Sent from my phone. Please excuse my brevity. > > On October 31, 2014 6:20:38 AM PDT, Charles Novaes de Santana < > charles.sant...@gmail.com> wrote: > >My apologies, because I sent the message before finishing it. i am very > >sorry about this. Please find below my message (I use to write the > >messages > >from the end to the beginning... sorry :)). > > > >Dear all, > > > >I am trying to compare two matrices, in order to find in which rows of > >a > >matrix A I can find the same values as in matrix B. I am trying to do > >it > >for matrices with around 2500 elements, but please find below a toy > >example: > > > >A = matrix(1:10,nrow=5) > >B = A[-c(1,2,3),]; > > > >So > >> A > > [,1] [,2] > >[1,] 1 6 > >[2,] 2 7 > >[3,] 3 8 > >[4,] 4 9 > >[5,] 5 10 > > > >and > >> B > > [,1] [,2] > >[1,] 4 9 > >[2,] 5 10 > > > >I would like to compare A and B in order to find in which rows of A I > >can > >find the rows of B. Something similar to %in% with one dimensional > >arrays. > >In the example above, the answer should be 4 and 5. > > > >I did a function to do it (see it below), it gives me the correct > >answer > >for this toy example, but the excess of for-loops makes it extremely > >slow > >for larger matrices. I was wondering if there is a better way to do > >this > >kind of comparison. Any idea? Sorry if it is a stupid question. > > > >matbinmata<-function(B,A){ > > res<-c(); > > rowsB = length(B[,1]); > > rowsA = length(A[,1]); > > colsB = length(B[1,]); > > colsA = length(A[1,]); > > for (i in 1:rowsB){ > > for (j in 1:colsB){ > > for (k in 1:rowsA){ > > for (l in 1:colsA){ > > if(A[k,l]==B[i,j]){res<-c(res,k);} > > } > > } > > } > > } > > return(unique(sort(res))); > >} > > > > > >Best, > > > >Charles > > > >On Fri, Oct 31, 2014 at 2:12 PM, Charles Novaes de Santana < > >charles.sant...@gmail.com> wrote: > > > >> A = matrix(1:10,nrow=5) > >> B = A[-c(1,2,3),]; > >> > >> So > >> > A > >> [,1] [,2] > >> [1,] 1 6 > >> [2,] 2 7 > >> [3,] 3 8 > >> [4,] 4 9 > >> [5,] 5 10 > >> > >> and > >> > B > >> [,1] [,2] > >> [1,] 4 9 > >> [2,] 5 10 > >> > >> I would like to compare A and B in order to find in which rows of A I > >can > >> find the rows of B. Something similar to %in% with one dimensional > >arrays. > >> In the example above, the answer should be 4 and 5. > >> > >> I did a function to do it (see it below), it gives me the correct > >answer > >> for this toy example, but the excess of for-loops makes it extremely > >slow > >> for larger matrices. I was wondering if there is a better way to do > >this > >> kind of comparison. Any idea? Sorry if it is a stupid question. > >> > >> matbinmata<-function(B,A){ > >> res<-c(); > >> rowsB = length(B[,1]); > >> rowsA = length(A[,1]); > >> colsB = length(B[1,]); > >> colsA = length(A[1,]); > >> for (i in 1:rowsB){ > >> for (j in 1:colsB){ > >> for (k in 1:rowsA){ > >> for (l in 1:colsA){ > >> if(A[k,l]==B[i,j]){res<-c(res,k);} > >> } > >> } > >> } > >> } > >> return(unique(sort(res))); > >> } > >> > >> > >> Best, > >> > >> Charles > >> > >> > >> -- > >> Um axé! :) > >> > >> -- > >> Charles Novaes de Santana, PhD > >> http://www.imedea.uib-csic.es/~charles > >> > > > > > > > >-- > >Um axé! :) > > > >-- > >Charles Novaes de Santana, PhD > >http://www.imedea.uib-csic.es/~charles > > > > [[alternative HTML version deleted]] > > > >______________________________________________ > >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. > > -- Um axé! :) -- Charles Novaes de Santana, PhD http://www.imedea.uib-csic.es/~charles [[alternative HTML version deleted]] ______________________________________________ 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.