[R] Factor levels.

Rolf Turner r.turner at auckland.ac.nz
Wed Oct 3 21:20:18 CEST 2007


On 3/10/2007, at 5:48 PM, Peter Dalgaard wrote:

> Rolf Turner wrote:
>> I have factors with levels ``Unit", "Achieved", and "Scholarship";  
>> I  wish to replace these with
>> "U", "A", and "S".
>>
>> So I do
>>
>> 	fff <- factor(fff,labels=c("U","A","S"))
>>
>> This works as long as all of the levels are actually present in  
>> the  factor.  But if ``Scholarship'' is absent
>> (as if often is) then I get an error.
>>
>> I can do a workaround such as
>>
>> 	fff <- factor(c("U","A","S")[fff],levels=c("U","A","S"))
>>
>> but this seems kludgy to me.
>>
> Does it even work? (What if it is the first or the 2nd level that  
> is absent?

	Yes it works.  What's the problem?

	To beat it to death:  if the second level of fff is absent then fff  
will consist entirely of 1's and 3's,
	and so c("U","A","S")[fff] will consist entirely of U's and S's.  I  
can then set the levels to be
	c("U","A","S") and get what I want.

	Note that if I just did

		fff <- factor(c("U","A","S")[fff])

	in these circumstances, then I would get a factor whose levels were c 
("U","S") which is NOT what I want.
	(I.e. I want the levels always to be c("U","A","S") irrespective of  
what levels are actually present in the factor.)

> The canonical way is
>
> factor(fff, levels=c("Unit", "Achieved", "Scholarship"), labels=c 
> ("U","A","S"))

	Right.  That is indeed sexier.  Thanks.

			cheers,

				Rolf

######################################################################
Attention:\ This e-mail message is privileged and confidenti...{{dropped}}



More information about the R-help mailing list