Skip to content
Back to formatted view

Raw Message

Message-ID: <4D9F26A3.6060609@gmail.com>
Date: 2011-04-08T15:15:47Z
From: Duncan Murdoch
Subject: duplicates() function
In-Reply-To: <BANLkTimQEeXMPCjWaHuQZ74t8d0A_9XeyQ@mail.gmail.com>

On 08/04/2011 11:08 AM, Joshua Ulrich wrote:
> How about:
>
> y<- rep(NA,length(x))
> y[duplicated(x)]<- match(x[duplicated(x)] ,x)

That's a nice solution for vectors.  Unfortunately for me, I have a 
matrix (which duplicated() handles by checking whole rows).  So a better 
example that I should have posted would be

x <-  cbind(1, c(9,7,9,3,7) )

and I'd still like the same output

>  duplicated(x)
[1] FALSE FALSE  TRUE FALSE TRUE

>  duplicates(x)
[1] NA NA  1 NA  2


Duncan Murdoch

> --
> Joshua Ulrich  |  FOSS Trading: www.fosstrading.com
>
>
>
> On Fri, Apr 8, 2011 at 9:59 AM, Duncan Murdoch<murdoch.duncan at gmail.com>  wrote:
> >  I need a function which is similar to duplicated(), but instead of returning
> >  TRUE/FALSE, returns indices of which element was duplicated.  That is,
> >
> >>  x<- c(9,7,9,3,7)
> >>  duplicated(x)
> >  [1] FALSE FALSE  TRUE FALSE TRUE
> >
> >>  duplicates(x)
> >  [1] NA NA  1 NA  2
> >
> >  (so that I know that element 3 is a duplicate of element 1, and element 5 is
> >  a duplicate of element 2, whereas the others were not duplicated according
> >  to our definition.)
> >
> >  Is there a simple way to write this function?  I have  an ugly
> >  implementation in R that loops over all the values; it would make more sense
> >  to redo it in C, if there isn't a simple implementation I missed.
> >
> >  Duncan Murdoch
> >
> >  ______________________________________________
> >  R-devel at r-project.org mailing list
> >  https://stat.ethz.ch/mailman/listinfo/r-devel
> >