I apologize if this is not appropriate for this mailing list. In R, there is already functionality to drop unused factor levels. However, I am proposing the code below that I wrote. In some occasions, it was faster than applying function 'factor'. In any case, there is no restriction for anyone to use the code below.
droplevels2 <- function(x) { if (is.null(levels(x))) stop("no 'levels' attribute") nlev <- length(levels(x)) y <- unclass(x) tb <- tabulate(y, nlev) used <- as.logical(tb) tb[used] <- seq(length=sum(used)) y[] <- tb[y] levels(y) <- levels(x)[used] attr(y, "class") <- attr(x, "class") y } Alternatively, one may use 'levels<-.factor' by assigning NA to unused levels, like below. levels(x)[ tabulate( unclass(x), length(levels(x))) == 0 ] <- NA ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel