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.dun...@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@r-project.org mailing list
>  https://stat.ethz.ch/mailman/listinfo/r-devel
>

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to