[R] How to convert a factor to a numeric?

Gabor Grothendieck ggrothendieck at myway.com
Wed Mar 2 01:17:02 CET 2005


Chris Bergstresser <chris <at> subtlety.com> writes:

: 
: Date:   Tue, 01 Mar 2005 16:45:36 -0600 
: From:   Chris Bergstresser <chris at subtlety.com>
: To:   <r-help at stat.math.ethz.ch> 
: Subject:   [R] How to convert a factor to a numeric? 
: 
:  
: Hi all --
: 
: I've got two columns, both of which correspond to three factor 
: levels (e.g., column1 is "a", "b", or "c"; column2 is "x", "y", or "z"). 
: I'd like to generate a third column, consisting on whether the two 
: factors are correctly aligned for a given case (in this example, "a" 
: corresponds to "x", "b" to "y", and "c" to "z"). For example:
: 
: a x TRUE
: a y FALSE
: b y TRUE
: c z TRUE
: b x FALSE
: 
: Several questions:
: 
: The easiest way seemed to me to be comparing the numeric values 
: across columns, but the encodings are (a=1, b=2, c=3) and (x=1, y=3, 
: z=2). Is there a way to change the underlying value representing each 
: factor, so I could just run an equality on them?

If f1 and f2 are the two factors:

   as.numeric(f1) == as.numeric(factor(as.character(f2)))

: Is there a simple way to check for correspondence without recoding 
: the factors?

I am not sure I would recommend this but it could be done like this:

   as.numeric(f1) == ifelse(f2=="x", 1, 5-as.numeric(f2))

: In the help for factor(), it says "In particular, 'as.numeric' 
: applied to a factor is meaningless, and may happen by implicit coercion. 
: To "revert" a factor 'f' to its original numeric values, 
: 'as.numeric(levels(f))[f]' is recommended and slightly more efficient 
: than 'as.numeric(as.character(f))'." However, I get the following 
: results. What's going on?

I suspect they were thinking of the case where the levels themselves are 
of class numeric as in factor(c(10,10,11,11,12,12)) since it does not
seem to be correct otherwise.




More information about the R-help mailing list