[R] Identify duplicate numbers and to increase a value
William Dunlap
wdunlap at tibco.com
Thu Jan 20 17:15:15 CET 2011
> -----Original Message-----
> From: r-help-bounces at r-project.org
> [mailto:r-help-bounces at r-project.org] On Behalf Of Ortiz, John
> Sent: Thursday, January 20, 2011 7:13 AM
> To: r-help at r-project.org
> Subject: [R] Identify duplicate numbers and to increase a value
>
> Hi everybody.
>
> I want to identify duplicate numbers and to increase a value
> of 0.01 for each time that it is duplicated.
>
> Example:
> x=c(1,2,3,5,6,2,8,9,2,2)
>
> I want to do this:
>
> 1
> 2 + 0.01
> 3
> 5
> 6
> 2 + 0.02
> 8
> 9
> 2 + 0.03
> 2 + 0.04
Your words made it sound like you wanted the
following
> x + (ave(x, x, FUN=seq_along)-1)/100
[1] 1.00 2.00 3.00 5.00 6.00 2.01 8.00 9.00 2.02 2.03
but your example indicates that you want to
alter any value that has a duplicate (including
the first) so it gets a bit more complicated.
E.g.,
> x + ave(x, x, FUN=function(xi)if(length(xi)==1) 0.0 else
seq_along(xi))/100
[1] 1.00 2.01 3.00 5.00 6.00 2.02 8.00 9.00 2.03 2.04
You could also use subscripting to use ave() only on
those elements of x which had duplicates.
There are trickier but faster ways (based on runs) of
doing this if you have very long vectors with lots of
unique values.
Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com
>
> I am trying to get something like this:
>
> 1
> 2.01
> 3
> 5
> 6
> 2.02
> 8
> 9
> 2.03
> 2.04
>
> Actually I just know the way to identify the duplicated numbers
>
> rbind(x, duplicated(x) | duplicated(x, fromLast=TRUE))
>
> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
> x 1 2 3 5 6 2 8 9 2 2
> 0 1 0 0 0 1 0 0 1 1
>
> Some advice?
>
> Thanks and regards
> John Ortiz
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
More information about the R-help
mailing list