>If you want to drop levels, use droplevels() either on the factor or on the >subset of your data frame. Example: >droplevels(f[1]) #One element, only one level
Calling factor() on a factor, as the OP did, also drops any unused levels, as the examples showed. > str(factor(factor(letters)[11:13])) Factor w/ 3 levels "k","l","m": 1 2 3 > str(droplevels(factor(letters)[11:13])) Factor w/ 3 levels "k","l","m": 1 2 3 Using droplevels instead of factor does make the intent clearer and droplevels works on data.frames. Bill Dunlap TIBCO Software wdunlap tibco.com On Fri, May 27, 2016 at 3:37 AM, S Ellison <s.elli...@lgcgroup.com> wrote: > > You did not change df$quant - you made a new object called 'subdf' > > containing a column called 'quant' that had only one level. Changing > subdf has > > no effect on df. > > Also, subsetting a factor _intentionally_ does not change the number of > levels. Example: > f <- factor(sample(letters[1:3], 30, replace=TRUE)) > f[1] #One element, still three levels > > If you want to drop levels, use droplevels() either on the factor or on > the subset of your data frame. Example: > droplevels(f[1]) #One element, only one level > > > Also worth noting that df is a function. > > df <- data.frame(quant=factor(letters)) > looks very like you're assigning a data frame to the function 'df' > (density for the F distribution) > It doesn't, because R is clever. But it's really not good practice to use > common function names as variable names. Too much potential for confusion. > > S Ellison > > > ******************************************************************* > This email and any attachments are confidential. Any u...{{dropped:13}} ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.