Return "TRUE" only for first match of values between matrix and vector. Classic List Threaded 4 messages Open this post in threaded view
|

Return "TRUE" only for first match of values between matrix and vector.

 I wish to return " True" in a matrix for only the first match of a value per row where the value equals that in a vector with the same number of values as rosw in the matrix eg: A<-matrix(c(2,3,2,1,1,2,NA,NA,NA,5,1,0,5,5,5),5,3) B<-c(2,1,NA,1,5) desired result:       [,1] [,2]  [,3] [1,]  TRUE FALSE FALSE [2,] FALSE   NA FALSE [3,]    NA   NA    NA [4,]  TRUE   NA FALSE [5,] FALSE TRUE  FALSE however A==B returns:       [,1] [,2]  [,3] [1,]  TRUE TRUE FALSE [2,] FALSE   NA FALSE [3,]    NA   NA    NA [4,]  TRUE   NA FALSE [5,] FALSE TRUE  TRUE and apply(A,1,function(x) match (B,x)) returns      [,1] [,2] [,3] [,4] [,5] [1,]    1   NA    1   NA   NA [2,]    3   NA   NA    1    1 [3,]   NA    2    2    2   NA [4,]    3   NA   NA    1    1 [5,]   NA   NA    3    3    2 thanks         [[alternative HTML version deleted]] ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

Re: Return "TRUE" only for first match of values between matrix and vector.

 Hi, Try: indx <- A==B t(apply(indx,1,function(x) {x[duplicated(x) & !is.na(x)] <- FALSE; x})) #      [,1]  [,2]  [,3] #[1,]  TRUE FALSE FALSE #[2,] FALSE    NA FALSE #[3,]    NA    NA    NA #[4,]  TRUE    NA FALSE #[5,] FALSE  TRUE FALSE A.K. On Friday, May 2, 2014 4:47 AM, nevil amos <[hidden email]> wrote: I wish to return " True" in a matrix for only the first match of a value per row where the value equals that in a vector with the same number of values as rosw in the matrix eg: A<-matrix(c(2,3,2,1,1,2,NA,NA,NA,5,1,0,5,5,5),5,3) B<-c(2,1,NA,1,5) desired result:       [,1] [,2]  [,3] [1,]  TRUE FALSE FALSE [2,] FALSE   NA FALSE [3,]    NA   NA    NA [4,]  TRUE   NA FALSE [5,] FALSE TRUE  FALSE however A==B returns:       [,1] [,2]  [,3] [1,]  TRUE TRUE FALSE [2,] FALSE   NA FALSE [3,]    NA   NA    NA [4,]  TRUE   NA FALSE [5,] FALSE TRUE  TRUE and apply(A,1,function(x) match (B,x)) returns      [,1] [,2] [,3] [,4] [,5] [1,]    1   NA    1   NA   NA [2,]    3   NA   NA    1    1 [3,]   NA    2    2    2   NA [4,]    3   NA   NA    1    1 [5,]   NA   NA    3    3    2 thanks     [[alternative HTML version deleted]] ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code. ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.