[R] Reclassify string values

Zev Ross zev at zevross.com
Thu Nov 3 21:31:26 CET 2011


Hi Peter,

Thanks for the response. What you've suggested works fine but I'm 
looking for something that is simpler than my solution and avoids the 
pesky warning message. Your response avoids the warning message but just 
as complex (if not more). I just assumed there would be a function along 
the lines of:

 > mydata <- c("A", "C", "A", "D", "B", "B")
 > reclassify(mydata, inCategories=c("A", "B" ,"C", "D"),  
outCategories=c("Group1", "Group1", "Group2", "Group2"))

[1] "Group1" "Group2" "Group1" "Group2" "Group1" "Group1"

Zev


On 11/3/2011 3:13 PM, Peter Langfelder wrote:
> On Thu, Nov 3, 2011 at 11:59 AM, Zev Ross<zev at zevross.com>  wrote:
>> Hi All,
>>
>> Is there a simple way to convert a string such as c("A", "B" ,"C", "D") to a
>> string of c("Group1", "Group1", "Group2", "Group2"). Naturally I could use
>> the factor function as below but I don't like seeing that warning message
>> (and I don't want to turn off warning messages). Perhaps a function called
>> "reclassify" or "recategorize"?
>>
>> Zev
>>
>> x<-LETTERS[1:4]
>> x2<-as.character(factor(x, levels=LETTERS[1:4], labels=rep(c("Group1",
>> "Group2"), each=2)))
>>
>> Warning message:
>> In `levels<-`(`*tmp*`, value = c("Group1", "Group1", "Group2", "Group2" :
>>   duplicated levels will not be allowed in factors anymore
> If you want to "translate", why not first build a translation table
>
> tt = cbind(LETTERS[1:4], c("group1", "group1", "group2", "group2"))
>
> then apply it on an example:
>
> xx = sample(LETTERS[1:4], 20, replace = TRUE)
>
> translation = tt[ match(xx, tt[, 1]), 2]
>
>> translation
>   [1] "group2" "group2" "group2" "group2" "group2" "group1" "group2" "group1"
>   [9] "group2" "group1" "group1" "group2" "group2" "group2" "group1" "group2"
> [17] "group2" "group1" "group1" "group2"
>
> Or did I misunderstand your intent?
>
> Peter
>

-- 
Zev Ross
ZevRoss Spatial Analysis
120 N Aurora, Suite 3A
Ithaca, NY 14850
607-277-0004 (phone)
866-877-3690 (fax, toll-free)
zev at zevross.com



More information about the R-help mailing list