[R] Subset doesn't drop unused factor levels

Frank E Harrell Jr f.harrell at vanderbilt.edu
Thu Oct 7 20:38:45 CEST 2004

hadley wickham wrote:
> a <- data.frame(b = rep(1:5, each=2), c=factor(rep("a",10), levels=c("a","b")))
> levels(subset(a, b=1, drop=T)$c)
> # [1] "a" "b"
> Is this a bug?
> Thanks,,
> Hadley

This is always controversial.  I am apparently in the small minority in 
believing that the default behavior is what you are wishing for.  That's 
why the Hmisc package by default drops unused levels (but allows you to 
override that with options(drop.unused.levels=FALSE).  It is distasteful 
to have to override system behavior but I felt I had to in this case. 
No one in R-core wanted to add a non-default option to R e.g. 


Frank E Harrell Jr   Professor and Chair           School of Medicine
                      Department of Biostatistics   Vanderbilt University

More information about the R-help mailing list