[R] Recoding

Marc Schwartz marc_schwartz at comcast.net
Fri Jun 27 21:33:36 CEST 2008


on 06/27/2008 01:41 PM Agustin Lobo wrote:
> Hi!
> 
> Given a vector (or a factor within a df),i.e. v1 <- c(1,1,1,2,3,4,1,10,3)
> and a dictionary
> cbind(c(1,2,3),c(1001,1002,1003))
> 
> is there a function (on the same line than recode() in car)
> to get v2 as c(1001,1001,1001,1002,1003,4,1001,10,1003) ?
> 
> I'm using myself a function based on match() since
> long ago (I think that thanks to advice by Prof. B. Ripley),
> but would like to know if there is an standard function (i.e., like
> recode()). What I'm using is:
> 
> "reclas" <- function(v, origen, imagen, directo = T, resto=1)
> {
>         if(directo == F) {
>             aux <- origen
>                 origen <- imagen
>                 imagen <- aux
>         }
>         m <- match(v, origen, 0)
>         #print("match finished")
>         if(resto==0) v <- v*0
>         v[m > 0] <- imagen[m]
>         v
> }
> 
> Agus
> 

v1 <- c(1,1,1,2,3,4,1,10,3)
dic <- cbind(c(1,2,3),c(1001,1002,1003))

Ind <- match(v1, dic[, 1])

 > Ind
[1]  1  1  1  2  3 NA  1 NA  3


 > sapply(seq(along = Ind),
          function(x) if (is.na(Ind[x])) v1[x] else dic[Ind[x], 2])
[1] 1001 1001 1001 1002 1003    4 1001   10 1003


I would certainly test that a bit more to be sure it works on other data.

HTH,

Marc Schwartz



More information about the R-help mailing list