Re: [R] Return TRUE only for first match of values between matrix and vector.
Hi, This should be little more faster. indx - A==B indx1 - which(indx, arr.ind=TRUE) indx[indx1[duplicated(indx1[,1]),]]- FALSE indx ##Speed comparison ##previous method fun1 - function(mat, vec) { stopifnot(dim(mat)[1] == length(vec)) indx - mat == vec t(apply(indx, 1, function(x) { x[duplicated(x) !is.na(x)] - FALSE x })) } ##modified fun2 - function(mat, vec) { stopifnot(dim(mat)[1] == length(vec)) indx - mat == vec indx1 - which(indx, arr.ind = TRUE) indx[indx1[duplicated(indx1[, 1]), ]] - FALSE indx } identical(fun1(A,B), fun2(A,B)) #[1] TRUE set.seed(498) A1 - matrix(sample(40,1e5*500,replace=TRUE), ncol=500) set.seed(345) B1 - sample(70, 1e5, replace=TRUE) system.time(res1 - fun1(A1,B1)) # user system elapsed # 7.840 0.344 8.195 system.time(res2 - fun2(A1,B1)) # user system elapsed # 0.304 0.080 0.382 identical(res1,res2) #[1] TRUE which(rowSums(res1,na.rm=TRUE)1) #integer(0) A.K. On Friday, May 2, 2014 7:51 AM, arun smartpink...@yahoo.com wrote: 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.a...@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. __ 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.
Re: [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.a...@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. __ 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.
Re: [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.a...@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 NANA [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 NANA [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 NA1 NA NA [2,]3 NA NA11 [3,] NA222 NA [4,]3 NA NA11 [5,] NA NA332 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]] __ 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.