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

From: Gabor Grothendieck <>
Date: Wed 02 Mar 2005 - 11:17:02 EST

Chris Bergstresser <chris <at>> writes:

: Date: Tue, 01 Mar 2005 16:45:36 -0600
: From: Chris Bergstresser <>
: To: <>
: 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. mailing list PLEASE do read the posting guide! Received on Wed Mar 02 11:28:45 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:30:39 EST