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]]