From: Berton Gunter <gunter.berton_at_gene.com>

Date: Wed 02 Mar 2005 - 10:49:18 EST

R-help@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 Received on Wed Mar 02 10:56:37 2005

Date: Wed 02 Mar 2005 - 10:49:18 EST

# 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.

"The business of the statistician is to catalyze the scientific learning process." - George E. P. Box

> -----Original Message-----

*> From: r-help-bounces@stat.math.ethz.ch
**> [mailto:r-help-bounces@stat.math.ethz.ch] On Behalf Of Chris
**> Bergstresser
**> Sent: Tuesday, March 01, 2005 2:46 PM
**> To: r-help@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@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
*

>

R-help@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 Received on Wed Mar 02 10:56:37 2005

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