[R] unique with tolerance

Duncan Murdoch murdoch.duncan at gmail.com
Thu Sep 6 18:47:50 CEST 2012


On 06/09/2012 6:48 AM, Michael Bach wrote:
> Dear R Users and Developers,
>
> I am trying to do the equivalent of
>
> v <- c(1,2,3,3,2,1,)
> vu <- unique(v)
>
> for a vector such as
>
> v2 <- c(1.02, 2.03, 1.00, 3.04, 3.06)
> vut <- ...
>
> As indicated in the subject, we need approximately unique values with a defined
> tolerance, i.e. for the v2 vector the resulting vut vector using a tolerance of
> .1 should return e.g.
>
> [1] 1.02 2.03 3.06
>
> Also, mean/min values instead of max could be returned.
>
> My actual question: Is there a convenience function or other mechanism already
> implemented that could do something similar?

It might be enough to round your values before checking.  For the example,

dups <- duplicated( round(v2) )
v2[!dups]

(This gives 3.04 rather than 3.06; I don't know if you care.)

Duncan Murdoch




More information about the R-help mailing list