[R] letters to numbers conversion

Prof Brian Ripley ripley at stats.ox.ac.uk
Fri May 2 08:50:04 CEST 2003


On Thu, 1 May 2003, Tony Plate wrote:

> If you're looking for something that works with matrices or arrays you 
> could use the following.  Note that you would want to substitute LETTERS 
> for letters if your original data was in uppercase.  The stuff with 
> dimnames isn't necessary for this example, but it don't hurt and it will 
> preserve dimnames when the original data has them.
> 
>  > x <- matrix(letters[1:9],ncol=3)
>  > x
>       [,1] [,2] [,3]
> [1,] "a"  "d"  "g"
> [2,] "b"  "e"  "h"
> [3,] "c"  "f"  "i"
>  > match(x, letters)
> [1] 1 2 3 4 5 6 7 8 9
>  > array(match(x, letters), dim=dim(x), dimnames=dimnames(x))
>       [,1] [,2] [,3]
> [1,]    1    4    7
> [2,]    2    5    8
> [3,]    3    6    9

A useful trick here is to assign to foo[] as in

> y <- x; mode(y) <- "numeric"; y[] <- match(x, letters)
> y
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

That carries over all relevant attributes, so works for vectors, matrices, 
arrays ....  (Often you don't need to change the mode.)


-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



More information about the R-help mailing list