On 11.08.2011 19:22, David Winsemius wrote:

On Aug 11, 2011, at 11:42 AM, Uwe Ligges wrote:



On 11.08.2011 16:10, zcatav wrote:
Hello R people,

I have a "data.frame". Status variable has 3 values. 0->alive,
1->dead and
2->missed
Status as a factor have correct levels. Levels and labels output as
follows;

levels(Adbf$status); labels(Adbf$status)
[1] "0" "1" "2"
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"
[11] "11" "12" "13" "14" "15" "16" "17" "18" "19" "20"
[21] "21" "22" "23" "24" "25" "26" "27" "28" "29" "30"
[31] "31" "32" "33" "34" "35" "36" "37" "38" "39" "40"
[41] "41" "42" "43" "44" "45" "46" "47" "48" "49" "50"

........................................................................"644"


Can i add value.labels to status variable? If yes how? Can i see these
value.labels on results or graphics?


levels(Adbf$status) <- c("alive", "dead", "missed")

I'm probably making some mistake, but my efforts to use something
similar to that construction have caused me to "destroy" variables in
the sense that I have made them all NA's. My more (defensive?,
unnecessary?) practice has become:

Adbf$status <- factor( Adbf$status, labels= c("alive", "dead", "missed") )

When I try to use the `levels<-' operation now on what I think is a
similar object, I get an error but maybe that relates to the fact that
levels and labels are different?

 > status <- factor( sample(1:50, 400, replace=TRUE) )
 > status <- status[status %in% c("1", "2", "3")]
 > str(status)
Factor w/ 50 levels "1","2","3","4",..: 3 3 1 1 2 2 2 2 1 1 ...

Errr, this should have 3 levels, "0", "1", "2", actually.

 > length(status)
[1] 24
 > levels(status) <- c("alive", "dead", "missed")
Error in `levels<-.factor`(`*tmp*`, value = c("alive", "dead", "missed" :
number of levels differs

The real question I have as a follow-on is what is the "right way" to
take an object like this:

levels(testres) <- c(levels(testres), "NotDone")
 > testres
[1] 1 2 3 <NA>
Levels: 1 2 3 NotDone

... and add a not done label?

These do not "work":
#1:
 > levels(testres) <- c("NotDone", levels(testres))
 > testres[4]
[1] <NA>
Levels: NotDone 1 2 3

#2:
 > testres <- factor(c(1,2,3,NA))
 > levels(testres) <- c(levels(testres), "NotDone")
 > testres[4]
[1] <NA>
Levels: 1 2 3 NotDone

I have been converting to numeric, changing NA to 0 and then refactoring
with labels=c("Not done", levels(old_factor) ), but that seems B(a)roke.

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.

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

Uwe

______________________________________________
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