Skip to content
Back to formatted view

Raw Message

Message-ID: <AANLkTikyYhZrXBBm9yVYjw_7G+G-Ks9zq5U=ZHYF9dtM@mail.gmail.com>
Date: 2011-01-20T17:15:05Z
From: Gabor Grothendieck
Subject: Identify duplicate numbers and to increase a value
In-Reply-To: <F49C61C25DEB0C48B7A660D6379C6B9703E9853E58@SI-MSEV02.US.SINET.SI.EDU>

On Thu, Jan 20, 2011 at 10: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
>

There is a function in the unreleased zooExtra package that will
uniquify numbers via linear interpolation:

> library(zoo)
> source("http://r-forge.r-project.org/scm/viewvc.php/*checkout*/pkg/zooExtra/R/make.unique.R?root=zoo")
> x <- c(1, 2, 3, 5, 6, 2, 8, 9, 2, 2)
>
>
> make.unique.approx(x)
 [1] 1.00 2.00 3.00 5.00 6.00 2.25 8.00 9.00 2.50 2.75
>
> # If you wish to make the increments smaller:
>
> ifelse(x == y, x, x + (y-x)/100)
 [1] 1.0000 2.0000 3.0000 5.0000 6.0000 2.0025 8.0000 9.0000 2.0050 2.0075



-- 
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com