use 'ifelse'

# not tested; you supply data for the '%in%'
map <- function(x){
        ifelse(x %in% c('a','b'), "North",
        ifelse(x %in% c('c','d'), "South",
        ifelse(x %in% c('e', 'f'), "East",
        ifelse(x %in% c('g', 'h'), "West", NA))))
}

On Tue, Sep 8, 2009 at 12:01 PM, <james.arn...@sssc.uk.com> wrote:
> Hello,
>
> I am trying to map a factor variable within a data frame to a new variable 
> whose entries are derived from the content of the original variable and there 
> are fewer factors in the new variable. That is, I'm trying to set up a 
> surjection.
>
> After first thinking that this would be a common operation and would have a 
> quite simple interface, I can not seem to find one, nor any similar posts on 
> this topic (please correct me if there is something).
>
> Therefore, I have written a function to perform this mapping. However, the 
> function I have written doesn't seem to work with vectors greater than length 
> 1, and as such is useless. Is there any way to ensure the function would work 
> appropriately for each element of the vector input?
>
> mapLN <- function(x)
> {
>        Reg <- levels(df$Var1)
>        if (x==Reg[1] | x==Reg[2] | x==Reg[13] | x==Reg[17] | x==Reg[20] | 
> x==Reg[23] | x==Reg[27]) {"North"} else
>        if (x==Reg[3] | x==Reg[5] | x==Reg[7] | x==Reg[14] | x==Reg[15] | 
> x==Reg[24] | x==Reg[30]) {"East"} else
>        if (x==Reg[4] | x==Reg[6] | x==Reg[8] | x==Reg[9] | x==Reg[11] | 
> x==Reg[16] | x==Reg[18] | x==Reg[21] | x==Reg[22] | x==Reg[25] | x==Reg[28] | 
> x==Reg[29] | x==Reg[31]) {"West"} else
>        if (x==Reg[10] | x==Reg[12] | x==Reg[19] | x==Reg[26] | x==Reg[32]) 
> {"South"} else
>        stop("Not in original set")
> }
>
> Many thanks,
> James
>
> This E-Mail is confidential and intended solely for the use of the individual 
> to whom it is addressed.  If you are not the addressee, any disclosure, 
> reproduction, copying, distribution or other dissemination or use of this 
> communication is strictly prohibited.  If you have received this transmission 
> in error please notify the sender immediately by replying to this e-mail, or 
> telephone 01382 207 222, and then delete this e-mail.
>
> All outgoing messages are checked for viruses however no guarantee is given 
> that this e-mail message, and any attachments, are free from viruses.  You 
> are strongly recommend to check for viruses using your own virus scanner.  
> Neither SCRC or SSSC will accept responsibility for any damage caused as a 
> result of virus infection.
>
>
> ______________________________________________
> R-help@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.
>
>



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?

______________________________________________
R-help@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.

Reply via email to