Hervé Pagès
2015-Jul-29 06:07 UTC
[R] indices of mismatch element in two vector with missing values
On 07/28/2015 09:58 PM, Peter Alspach wrote:> One way .... > > seq(test1)[-which(test1==test2)]One question is whether 2 NAs should be considered to match or not. The OP doesn't tell but I guess he wants them to match: test1 <- c("1", "2", NA, "4", NA, "6") test2 <- c("1", "2", "3", NA, NA, "66") seq(test1)[-which(test1==test2)] # [1] 3 4 5 6 5 should probably not be there! H.> > but I imagine there are better ones ..... > > Peter Alspach > > -----Original Message----- > From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of baccts > Sent: Wednesday, 29 July 2015 8:26 a.m. > To: r-help at r-project.org > Subject: [R] indices of mismatch element in two vector with missing values > > How would you return the index where two vectors differs if they may contain missing (NA) values? > For example: > test1 <- c("1","2",NA); > test2 <- c("1","2","3"); > which(test1!=test2) does not return 3! > > Thanks in advance. > > > > > > > -- > View this message in context: http://r.789695.n4.nabble.com/indices-of-mismatch-element-in-two-vector-with-missing-values-tp4710497.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see 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. > The contents of this e-mail are confidential and may be ...{{dropped:14}} > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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. >-- Herv? Pag?s Program in Computational Biology Division of Public Health Sciences Fred Hutchinson Cancer Research Center 1100 Fairview Ave. N, M1-B514 P.O. Box 19024 Seattle, WA 98109-1024 E-mail: hpages at fredhutch.org Phone: (206) 667-5791 Fax: (206) 667-1319
Martin Maechler
2015-Jul-29 09:03 UTC
[R] indices of mismatch element in two vector with missing values
>>>>> Herv? Pag?s <hpages at fredhutch.org> >>>>> on Tue, 28 Jul 2015 23:07:14 -0700 writes:> On 07/28/2015 09:58 PM, Peter Alspach wrote: >> One way .... >> >> seq(test1)[-which(test1==test2)] > One question is whether 2 NAs should be considered to match or not. > The OP doesn't tell but I guess he wants them to match: > test1 <- c("1", "2", NA, "4", NA, "6") > test2 <- c("1", "2", "3", NA, NA, "66") > seq(test1)[-which(test1==test2)] > # [1] 3 4 5 6 > 5 should probably not be there! >> but I imagine there are better ones ..... >> Yes, indeed, as logical indexing is considerably safer than "negative indexing with which(.)" : PLEASE, everyone, do remember: %%>===================================================================<%% %%> There is one ___big__ disadvantage to [ - which(<logical>) ] : <%% %%> It entirely __fails__ when the logical vector is all FALSE <%% %%>===================================================================<%% ## Example (remember, we want the indices of *differing* entries): ## ------- Here, all entries differ, so we want to get 1:8 : x <- c(NA, 1:7) y <- c(11:17, NA) ## now this seq(x)[ - which(x == y) ] ## gives not what you expect ## But logical indexing always works: x == y & is.na(x) == is.na(y) seq(x)[!(x == y & is.na(x) == is.na(y))] With output :> x <- c(NA, 1:7) > y <- c(11:17, NA) > ## now this > seq(x)[ - which(x == y) ] ## gives not what you expectinteger(0)> ## But logical indexing always works: > x == y & is.na(x) == is.na(y)[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE> seq(x)[!(x == y & is.na(x) == is.na(y))][1] 1 2 3 4 5 6 7 8>Martin Maechler ETH Zurich >> -----Original Message----- >> From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of baccts >> Sent: Wednesday, 29 July 2015 8:26 a.m. >> To: r-help at r-project.org >> Subject: [R] indices of mismatch element in two vector with missing values >> >> How would you return the index where two vectors differs if they may contain missing (NA) values? >> For example: >> test1 <- c("1","2",NA); >> test2 <- c("1","2","3"); >> which(test1!=test2) does not return 3! >> >> Thanks in advance. >> >>
baccts
2015-Jul-29 13:19 UTC
[R] indices of mismatch element in two vector with missing values
Thank you everyone for taking the time to reply. Thanks Martin and Herv? for your solutions. Now I just need to remember to check for NA match. -- View this message in context: http://r.789695.n4.nabble.com/indices-of-mismatch-element-in-two-vector-with-missing-values-tp4710497p4710518.html Sent from the R help mailing list archive at Nabble.com.