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