# Re: [R] recategorizing a vector into discrete states

From: Marc Schwartz (via MN) <mschwartz_at_mn.rr.com>
Date: Wed 17 Aug 2005 - 04:08:24 EST

On Tue, 2005-08-16 at 13:18 -0400, Allan Strand wrote:
> Hi All,
>
> I'm trying to take a numerical vector and produce a new vector of the
> same length where each element in the first is placed into a category
> given by a 'breaks-like' vector. The values in the result should equal
> the lower bounds of each category as defined in the breaks vector.
>
> I suspect that a vectorized solution is pretty simple, but I can't
> seem to figure it out today. Here is an example of my problem:
>
> Vector 'a' is the original vector. Vector 'b' gives the lower bounds
> of the categories. Vector 'c' is the result I am seeking.
>
> a <- c(0.9, 11, 1.2, 2.4, 4.0, 5.0, 7.3, 8.1, 3.3, 4.5)
> b <- c(0, 2, 4, 6, 8)
>
> c <- c(0, 8, 0, 2, 4, 4, 6, 8, 2, 4)
>
> Any suggestions would be greatly appreciated.
>
> cheers,
> Allan Strand

See ?cut

> a <- c(0.9, 11, 1.2, 2.4, 4.0, 5.0, 7.3, 8.1, 3.3, 4.5)
> b <- c(0, 2, 4, 6, 8)

> cut(a, c(b, Inf), labels = b, right = FALSE)
 0 8 0 2 4 4 6 8 2 4
Levels: 0 2 4 6 8

Note that cut() returns a factor.

HTH, Marc Schwartz

R-help@stat.math.ethz.ch mailing list