On 03-Oct-07 04:57:33, 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.
> 
> Is there a sexier way?
>                       cheers,
>                               Rolf Turner

Maybe that particular issue could be worked round with something
derived (e.g. take the leading character in the strings) from

  labels=unique(fff)

but that doesn't work round what seems to be a loose specification
of the correspondence between "U" and "Unit", "A" and "Achieved",
"S" and "Scholarship", in that factor(fff), unless told otherwise,
will see the levels in the order "Achieved", "Scholarship", "Unit"
but take the labels in the order "U", "A", "S".

For example, the following mimics your description but with
shorter strings, starting with a vector of "data":

> fff0<-rep(c("Uu","Aa","Ss"),5)

> factor(fff0)
 [1] Uu Aa Ss Uu Aa Ss Uu Aa Ss Uu Aa Ss Uu Aa Ss
Levels: Aa Ss Uu

> factor(fff0,labels=c("U","A","S"))
 [1] S U A S U A S U A S U A S U A
Levels: U A S

so now U->Aa, A->Ss, S->Uu

Maybe it would be enough for you to use

  labels=sort(substr(unique(fff0),1,1))

so that for:

> fff0<-rep(c("Uu","Aa","Ss"),5)

> factor(fff0)
 [1] Uu Aa Ss Uu Aa Ss Uu Aa Ss Uu Aa Ss Uu Aa Ss
Levels: Aa Ss Uu

> factor(fff0,labels=sort(substr(unique(fff0),1,1)))
 [1] U A S U A S U A S U A S U A S
Levels: A S U

while for:

> fff0<-rep(c("Uu","Aa",),8)
> factor(fff0)
 [1] Uu Aa Uu Aa Uu Aa Uu Aa Uu Aa Uu Aa Uu Aa Uu Aa
Levels: Aa Uu
> factor(fff0,labels=sort(substr(unique(fff0),1,1)))
 [1] U A U A U A U A U A U A U A U A
Levels: A U



Hoping this helps,
Ted.

--------------------------------------------------------------------
E-Mail: (Ted Harding) <[EMAIL PROTECTED]>
Fax-to-email: +44 (0)870 094 0861
Date: 03-Oct-07                                       Time: 07:40:54
------------------------------ XFMail ------------------------------

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to