nevil amos
2014-May-02 08:46 UTC
[R] 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]]
arun
2014-May-02 11:51 UTC
[R] 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 <nevil.amos at gmail.com> 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]] ______________________________________________ R-help at 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.
Jorge I Velez
2014-May-02 13:04 UTC
[R] Return "TRUE" only for first match of values between matrix and vector.
Hi Nevil, Try apply(A, 2, function(x) x == B) HTH, Jorge.- On Fri, May 2, 2014 at 6:46 PM, nevil amos <nevil.amos@gmail.com> 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]] > > ______________________________________________ > 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. >[[alternative HTML version deleted]]