# [R] Identify duplicate numbers and to increase a value

James Lawrence jdl37 at cam.ac.uk
Thu Jan 20 17:14:58 CET 2011

```Hello John,

If many numbers are duplicated, then one way is to coerce to a factor
and use the levels() function. For instance:

x <- c(1,1,2,2,2,3,3,4,1,1,2,4)
X <- factor(x)
for (i in levels(X))
{
loc <- (X==i); len = length(loc)
x[loc] <- x[loc] + 0.01 * (1:len)
}
x

[1] 1.01 1.02 2.01 2.02 2.03 3.01 3.02 4.01 1.03 1.04 2.04 4.02

Hope that helps

James Lawrence

On Thu, 2011-01-20 at 08:00 -0800, Joshua Wiley wrote:
> Hi John,
>
> If you only have one duplicated number (e.g., just 2), then this will work:
>
> x <- c(1,2,3,5,6,2,8,9,2,2)
> xd <- duplicated(x)
> x[xd] <- x[xd] + seq(sum(xd))/100
> x
>
> otherwise, I think a different framework than duplicated() will be
> necessary, because it will matter not just if the number is duplicated
> but which one how many times and where.
>
> Cheers,
>
> Josh
>
> On Thu, Jan 20, 2011 at 7:12 AM, Ortiz, John <OrtizJ at si.edu> wrote:
> > 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
> >
> > 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