[R] Compare rows of two matrices

TEMPL Matthias Matthias.Templ at statistik.gv.at
Mon Feb 21 16:34:26 CET 2005


Ohh. Now I begin to see. It´s really simple and elegant!
Thank you very much!!!
Matthias

----------------
> maybe something like this:
> 
> which(is.na(y)!=is.na(x), arr.ind=TRUE)
> 
> I hope it helps.
> 
> Best,
> Dimitris
> 
> ----
> Dimitris Rizopoulos
> Ph.D. Student
> Biostatistical Centre
> School of Public Health
> Catholic University of Leuven
> 
> Address: Kapucijnenvoer 35, Leuven, Belgium
> Tel: +32/16/336899
> Fax: +32/16/337015
> Web: http://www.med.kuleuven.ac.be/biostat/
>      http://www.student.kuleuven.ac.be/~m0390867/dimitris.htm
> 
-----------------
> How about this:
> 
>   is.na(x) & !is.na(y)
> 
> 
> Jonne.
> 
-----------------
> 
> ----- Original Message ----- 
> From: "TEMPL Matthias" <Matthias.Templ at statistik.gv.at>
> To: <r-help at stat.math.ethz.ch>
> Sent: Monday, February 21, 2005 3:48 PM
> Subject: [R] Compare rows of two matrices
> 
> 
> > Hello,
> >
> > #I have two matrices, eg.:
> >
> > y <-  matrix( c(20,  NA,  NA,  45,  50,  19,  32, 101,  10,  22,
> > NA,  NA,  80,  49,  61, 190), ncol=4 )
> > x <-  matrix( c(20,  NA,  NA,  NA,  50,  19,  32, 101,  10,  22, 
> > NA,  NA,  80,  49,  61, 190), ncol=4 )
> >
> > #Whereas x contains all NA´s from y plus some additional 
> NA´s. #I want 
> > to find the index of these additional NA´s. I think, there 
> must be a 
> > very easy way to do this.
> >
> > #Here are the indices of NA´s in x and y:
> > l1 <- which(is.na(x), arr.ind=TRUE)
> > l2 <- which(is.na(y), arr.ind=TRUE)
> >
> > #> l1
> > #     [,1] [,2]
> > #[1,]    2    1
> > #[2,]    3    1
> > #[3,]    4    1
> > #[4,]    3    3
> > #[5,]    4    3
> >
> > #> l2
> > #     row col
> > #[1,]   2   1
> > #[2,]   3   1
> > #[3,]   3   3
> > #[4,]   4   3
> >
> > #Now I want to find a matrix, which includes the values of l1,
> > without the rows of l2,
> > #which has equal entities (the index of the additional NA´S).
> > #In this example the result should be row 3 of l1 with the values 4 
> > and 1.
> > #The following code works, but I think there must be a much more 
> > elegant way to do this.
> >
> > l3 <- l1
> > l3 <- cbind( l1, rep(0, nrow(l1)) )
> > num <- 1
> >
> > for( i in 1:nrow(l1) ){
> >  for( j in 1:nrow(l2) ){
> >    if( l1[i,1] == l2[j,1] & l1[i,2] == l2[j,2]){
> >      l3[i,3] <- 1
> >    }
> >  }
> > }
> >
> > l4 <- l3[l3[,3]==0, c(1,2)]
> >
> > #> l4
> > #row col
> > #  4   1
> >
> > I have often such problems like this and I assume, that other people
> > have similar tasks.
> > My question is: Does anybody know a function in one package, which 
> > compares rows of two matrices like this or have anybody an idea to 
> > do this in a much more elegant way"?
> >
> > Thank you very much,
> > Matthias
> >
> > ______________________________________________
> > R-help at stat.math.ethz.ch mailing list 
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide!
> > http://www.R-project.org/posting-guide.html
> > 
>




More information about the R-help mailing list