A more transparent solution is old.factor[1:3, drop = TRUE]
That has worked for a long time, but apparently not been documented in R until 1.7.1 (docs added a couple of hours before release). So you could do (probably, since there are some bugs prior to 1.8.0) crb[] <- lapply(crb, function(x) x[drop=TRUE]) to remove the unused levels on all factors in the data frame. On Thu, 26 Jun 2003, Marc Schwartz wrote: > >-----Original Message----- > >From: [EMAIL PROTECTED] > >[mailto:[EMAIL PROTECTED] On Behalf Of Nick Bond > >Sent: Thursday, June 26, 2003 10:08 PM > >To: [EMAIL PROTECTED] > >Subject: [R] dropping factor levels in subset > > > > > >Dear all, > >I've taken a subset of data from a data frame using > > > >crb<-subset(all.raw, creek %in% c("CR") & year %in% > >c(2000,2001) & substrate > >%in% ("b")) > > > >this works fine, except that all of the original factor levels are > >maintained. This results in NA's for these empty levels when I > >try to do > >summaries based on factors using by(). Is there a simple way > >to drop the > >factor levels that are no longer represented. I've used na.omit on > the > >results from by, but then I have to deal with the attr setting, which > >catches me too. Probably a silly question, but I've done a search and > >couldn't find anything. Can someone help me please. > >Regards > >Nick > > See ?factor for additional information, but a quick example where > using factor(old.factor) will return the factor with unused levels > dropped. > > # Create a factor > > old.factor <- factor(c("One", "Two", "Three", "Four")) > > old.factor > [1] One Two Three Four > Levels: Four One Three Two > > # Create a subset of three noting that all four > # levels are retained > > new.factor <- old.factor[1:3] > > new.factor > [1] One Two Three > Levels: Four One Three Two > > # Drop unused level > > new.factor2 <- factor(new.factor) > > new.factor2 > [1] One Two Three > Levels: One Three Two > > > HTH, > > Marc Schwartz > > ______________________________________________ > [EMAIL PROTECTED] mailing list > https://www.stat.math.ethz.ch/mailman/listinfo/r-help > -- Brian D. Ripley, [EMAIL PROTECTED] Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595 ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help