# 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: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of Chris > Bergstresser > Sent: Tuesday, March 01, 2005 2:46 PM > To: [email protected] > 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 > > ______________________________________________ > [email protected] mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! > http://www.R-project.org/posting-guide.html > ______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
