# [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

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
>
>
> Thanks and regards
> John Ortiz
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help