[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