Re: [R] Recoding

From: Agustin Lobo <Agustin.Lobo_at_ija.csic.es>
Date: Fri, 04 Jul 2008 08:41:04 +0200

Thanks. This is a simple and efficient solution for the case in which the elements of the vector "values" are integers (which is often the case as in the example that came to my mind).

Nevertheless, let me suggest having a more comprehensive function recode in base,
as this is a very usual and well defined operation.

Agus

Phil Spector wrote:

> Agustin -
>    One way to do it is with named vectors:
> 

>> codes = c(1001,1002,1003)
>> names(codes) = c(1,2,3)
>> values = c(1,1,1,2,3,4,1,10,3)
>> newvalues = codes[values]
>> newvalues
>    1    1    1    2    3 <NA>    1 <NA>    3
> 1001 1001 1001 1002 1003   NA 1001   NA 1003
> 
> Since NAs are placed wherever there wasn't a value in codes,
> those values need to be restored:
> 

>> newvalues[is.na(newvalues)] = values[is.na(newvalues)]
>> newvalues
>    1    1    1    2    3 <NA>    1 <NA>    3
> 1001 1001 1001 1002 1003    4 1001   10 1003
> 
> 
>                                        - Phil Spector
>                      Statistical Computing Facility
>                      Department of Statistics
>                      UC Berkeley
>                      spector_at_stat.berkeley.edu
> 
> 
> 
> On Fri, 27 Jun 2008, 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
>>
>> --
>> Dr. Agustin Lobo
>> Institut de Ciencies de la Terra "Jaume Almera" (CSIC)
>> LLuis Sole Sabaris s/n
>> 08028 Barcelona
>> Spain
>> Tel. 34 934095410
>> Fax. 34 934110012
>> email: Agustin.Lobo_at_ija.csic.es
>> http://www.ija.csic.es/gt/obster
>>
>> ______________________________________________
>> R-help_at_r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
-- 
Dr. Agustin Lobo
Institut de Ciencies de la Terra "Jaume Almera" (CSIC)
LLuis Sole Sabaris s/n
08028 Barcelona
Spain
Tel. 34 934095410
Fax. 34 934110012
email: Agustin.Lobo_at_ija.csic.es
http://www.ija.csic.es/gt/obster

______________________________________________
R-help_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Received on Fri 04 Jul 2008 - 06:51:39 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Fri 04 Jul 2008 - 07:31:24 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive