Re: [Rd] duplicates() function

From: William Dunlap <wdunlap_at_tibco.com>
Date: Fri, 08 Apr 2011 09:22:08 -0700

> -----Original Message-----
> From: r-devel-bounces_at_r-project.org
> [mailto:r-devel-bounces_at_r-project.org] On Behalf Of Duncan Murdoch
> Sent: Friday, April 08, 2011 8:16 AM
> To: Joshua Ulrich
> Cc: R-devel_at_r-project.org
> Subject: Re: [Rd] duplicates() function
>
> 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).

Does R have a function like match() that treats matrices and data.frames row-wise, as duplicated() and unique() do? duplicated() and match() do related things and I've been annoyed that their methods for non-vectors do not match up with each other. (For historical reasons match cannot be changed, but perhaps a new generic is in order.)

JU's code still would not work on matrices, but a variant could.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com

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



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Fri 08 Apr 2011 - 16:25:26 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Fri 08 Apr 2011 - 16:40:44 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive