[Rd] duplicates() function
Joshua Ulrich
josh.m.ulrich at gmail.com
Fri Apr 8 17:39:01 CEST 2011
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
>> >
>
>
More information about the R-devel
mailing list