From josh.m.ulrich at gmail.com  Fri Apr  8 17:39:01 2011
From: josh.m.ulrich at gmail.com (Joshua Ulrich)
Date: Fri, 8 Apr 2011 10:39:01 -0500
Subject: [Rd] duplicates() function
In-Reply-To: <4D9F26A3.6060609@gmail.com>
References: <bug-14552-16@http.bugs.r-project.org/bugzilla3/>
	<20110408142610.88AEC970477@ix.urbanek.info>
	<B722DD6C-3B97-46EC-B369-8316F0F65D1F@cbs.dk>
	<4D9F22BE.5000502@gmail.com>
	<BANLkTimQEeXMPCjWaHuQZ74t8d0A_9XeyQ@mail.gmail.com>
	<4D9F26A3.6060609@gmail.com>
Message-ID: <BANLkTinVqU+yZ0JgQzJfvDW6GQKk0kAG_A@mail.gmail.com>

On Fri, Apr 8, 2011 at 10:15 AM, Duncan Murdoch
<murdoch.duncan at gmail.com> wrote:
> 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
>
For a matrix, could you apply the same strategy used in duplicated()?

y <- rep(NA,NROW(x))
temp <- apply(x, 1, function(x) paste(x, collapse="\r"))
y[duplicated(temp)] <- match(temp[duplicated(temp)], temp)

>> ?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
>> >
>
>



[Rd] duplicates() function
Joshua Ulrich