On Fri, Apr 8, 2011 at 11:08 AM, Joshua Ulrich <josh.m.ulr...@gmail.com> wrote: > How about: > > y <- rep(NA,length(x)) > y[duplicated(x)] <- match(x[duplicated(x)] ,x) >
I use Joshua's trick all the time. But it might still be nice with a C implementation. While we are discussing duplication, I would also like to see something like duplicated() but which returns TRUE whenever a value is later duplicated, so I can easily select the values of a vector which has are never duplicated. Right now I need to do something like y [ ! y %in% y[duplicated(y)] ] I am only bringing this up because of Duncan's request. Kasper > -- > 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 > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel