[R] value.labels

David Winsemius dwinsemius at comcast.net
Fri Aug 12 08:55:25 CEST 2011


On Aug 11, 2011, at 10:27 AM, Uwe Ligges wrote:

> On 11.08.2011 19:22, David Winsemius wrote:
>
> Hmm, when you want to add a level without changing the class of the  
> factor object, you will have to add the level at first and then  
> assign the level to the elements of the object. I'd probably rebuild  
> the whole thing in that case.
>

All I wanted to do was construct a "not done" label for the NA's in a  
factor created with cut so they would show up in tabulations. I think  
the answer to my question is to use `addNA`  and then use `levels<-`  
to change the NA level to "not done". I suppose RTFM is one way to  
answer the question and that was how I figured out what I now know.  
Looks like I can use either factor(x, exclude=NULL) or addNA(x.c)

This builds a test factor:

x<-rnorm(100)
is.na(x) <- sample(c(TRUE,FALSE), 100, c(.1,.9) , replace=TRUE)
x.c <- cut(x, seq(-3,3, by=0.5))

# I think these do the same thing:
x.cE <- factor(x, exclude=NULL)
x.cNA <- addNA(x.c)

# Relabel the NA level
levels(x.cNA) <- c(levels(x.c2)[-length(levels(x.c2))], "NotDone")

 > table(x.cNA)
x.cNA
(-3,-2.5] (-2.5,-2] (-2,-1.5] (-1.5,-1] (-1,-0.5]  (-0.5,0]    
(0,0.5]   (0.5,1]   (1,1.5]   (1.5,2]
         0         0         3         5        16        17         
14        14        15         4
   (2,2.5]   (2.5,3]   NotDone
         2         1         9

That seems a bit less baroque than converting to numeric , changing  
NA's to 0 and then adjusting the factor labels, although I still want  
to move the not-done level so it is first.

x.cN <- factor(x.cNA, levels=c("NotDone", c(levels(x.cNA)[- 
length(levels(x.cNA))]))
 > table(x.cN)
x.cN
   NotDone (-3,-2.5] (-2.5,-2] (-2,-1.5] (-1.5,-1] (-1,-0.5]   
(-0.5,0]   (0,0.5]   (0.5,1]   (1,1.5]
         9         0         0         3         5        16         
17        14        14        15
   (1.5,2]   (2,2.5]   (2.5,3]
         4         2         1

> As I understood the question, just how to rename the levels was the  
> original question.

Yes, that was how I understood it as well. I was asking what I thought  
was a related question.

>
> Uwe
>
>



More information about the R-help mailing list