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

Chris Bergstresser chris at subtlety.com
Tue Mar 1 23:45:36 CET 2005


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?
    Is there a simple way to check for correspondence without recoding 
the factors?
    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?

 > f = gl(3, 1, 6, labels=c("a", "b", "c"))
 > f
[1] a b c a b c
Levels: a b c
 > as.numeric(levels(f))[f]
[1] NA NA NA NA NA NA
Warning message:
NAs introduced by coercion
 > as.numeric(as.character(f))
[1] NA NA NA NA NA NA
Warning message:
NAs introduced by coercion
 > as.numeric(f)
[1] 1 2 3 1 2 3




More information about the R-help mailing list