A substantially faster replacement for droplevels
.
fdroplevels(x, ...)# S3 method for factor
fdroplevels(x, ...)
# S3 method for data.frame
fdroplevels(x, ...)
a factor, or data frame / list containing one or more factors.
not used.
x
will any unused factor levels removed.
base::droplevels
passes a factor from which levels are to be dropped to factor
, which first calls unique
and then match
to drop unused levels. Both functions internally use a hash table, which is highly inefficient. fdroplevels
does not require mapping values at all, but uses a super fast boolean vector method to determine which levels are unused and remove those levels. In addition, if no unused levels are found, x
is simply returned. Any missing values found in x
are efficiently skipped in the process of checking and replacing levels. All other attributes of x
are preserved.
# NOT RUN {
f <- iris$Species[1:100]
fdroplevels(f)
identical(fdroplevels(f), droplevels(f))
fNA <- na_insert(f)
fdroplevels(fNA)
identical(fdroplevels(fNA), droplevels(fNA))
identical(fdroplevels(ss(iris, 1:100)), droplevels(ss(iris, 1:100)))
# }
Run the code above in your browser using DataLab