[R] How to convert a factor to a numeric?
Berton Gunter
gunter.berton at gene.com
Wed Mar 2 00:49:18 CET 2005
# If fact1 and fact2 are your factors, let prm be the permutation such that
# levels(fact2) corresponds to ("aligns to") levels(fact1)[prm] . In your
example, the permutation is
# apparently the identity, (1:3).
#Then
levels(fact2)[prm[fact1]]==fact2
## does what you want. I wouldn't be surprised if there are cleverer
solutions, though.
-- Bert Gunter
Genentech Non-Clinical Statistics
South San Francisco, CA
"The business of the statistician is to catalyze the scientific learning
process." - George E. P. Box
> -----Original Message-----
> From: r-help-bounces at stat.math.ethz.ch
> [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Chris
> Bergstresser
> Sent: Tuesday, March 01, 2005 2:46 PM
> 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?
> 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
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide!
> http://www.R-project.org/posting-guide.html
>
More information about the R-help
mailing list