[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