fct_na_value_to_level()
and fct_na_level_to_value()
to convert
NA values to NA levels and vice versa (#337).All functions now validate their inputs, giving more useful errors if you accidentally misspecify an input.
fct_collapse()
can now use other_level = NA
(#291).
fct_count()
works with factors that contain NA
s in levels.
fct_explicit_na()
is deprecated in favour of fct_na_value_to_level()
.
fct_expand()
gains an after
argument so that you can choose where
the new levels are placed (#138).
fct_infreq()
gains the ability to weight by another variable using the w
argument (#261).
fct_inorder()
now works when not all levels appear in the data (#262).
fct_lump_prop()
and friends now work correctly if you supply weights
and have empty levels (#292).
fct_lump_n()
and fct_lump_prop()
will now create an "Other" level even
if it only consists of a single level. This makes them consistent with the
other fct_lump_*
functions (#274).
fct_other()
no longer generates a warning if no levels are replaced with
other (#265).
fct_relevel()
, fct_cross()
, and fct_expand()
now error if you name the
arguments in ...
since those names are ignored and your code probably
doesn't do what you think it does (#319).
fct_reorder()
and fct_reorder2()
now remove NA
values in .x
with a
warning (like ggplot2::geom_point()
and friends). You can suppress the
warning by setting .na_rm = TRUE
(#315).
fct_reorder()
and fct_reorder2()
gain a new .default
argument that
controls the placement of empty levels (including levels that might become
empty after removing missing values in .x
) (#266).
fct_unique()
now captures implicit missing values if present (#293).
New fct()
which works like factor()
but errors if values of x
are not included in the levels specification (#299)
first2()
and last2()
now ignore missing values in both x
and y
(#303).
Error messages are more informative.
Re-license as MIT (#277).
fct_lump_n()
no longer uses a partial argument name (@malcolmbarrett, #276).
as_factor()
gains a logical method that always returns a factor with
levels "FALSE" and "TRUE" (#185).
fct_c()
, fct_collapse()
and fct_recode()
are now explicitly
documented as using dynamic dots
(@labouz, #234).
fct_collapse()
now accepts a other_level
argument, to allow a
user-specified Other
level (@gtm19, #194). It now correctly collapses
factors when other_level
is not NULL
(#172), and makes "Other"
the
last level (#202) (@gtm19, #172 & #202)
fct_count()
no longer converts implicit NAs into explicit NAs (#151).
fct_inseq()
behaves more robustly when factor levels aren't all numbers
(#221).
fct_lump()
has been split up into three new functions: fct_lump_prop()
,
fct_lump_n()
, and fct_lump_lowfreq()
. (@jonocarroll, #167, #142).
All fct_lump_()
functions check their inputs more carefully
(@robinson_es, #169)
fct_reorder2()
gains a helper function first2()
, that sorts .y
by the
first value of .x
(@jtr13).
fct_collapse()
gains a group_other
argument to allow you to group all
un-named levels into "Other"
. (#100, @AmeliaMN)
fct_cross()
creates a new factor containing the combined levels from two
or more input factors, similar to base::interaction
(@tslumley, #136)
fct_inseq()
reorders labels in numeric order, if possible (#145, @kbodwin).
fct_lump_min()
preserves levels that appear at least min
times (can also
be used with the w
weighted argument) (@robinsones, #142).
fct_match()
performs validated matching, providing a safer alternative to
f %in% c("x", "y")
which silently returns FALSE
if "x"
or "y"
are not levels of f
(e.g. because of a typo) (#126, @jonocarroll).
fct_relevel()
can now level factors using a function that is passed the
current levels (#117).
as_factor()
now has a numeric method. By default, orders factors in numeric
order, unlike the other methods which default to order of appearance.
(#145, @kbodwin)
fct_count()
gains a parameter to also compute the proportion
(@zhiiiyang, #146).
fct_lump()
now does not change the label if no lumping occurs
(@zhiiiyang, #130).
fct_relabel()
now accepts character input.
fct_reorder()
and fct_reorder2()
no longer require that the summary
function return a numeric vector of length 1; instead it can return any
orderable vector of length 1 (#147).
fct_reorder()
, fct_reorder2()
and as_factor()
now use the ellipsis
package to warn if you pass in named components to ...
(#174).
fct_c()
now requires explicit splicing with !!!
if you have a
list of factors that you want to combine. This is consistent with an emerging
standards for handling ...
throughout the tidyverse.
fct_reorder()
and fct_reorder2()
have renamed fun
to .fun
to
avoid spurious matching of named arguments.
All functions that take ...
use "tidy" dots: this means that you use can
!!!
to splice in a list of values, and trailing empty arguments are
automatically removed. Additionally, all other arguments gain a .
prefix
in order to avoid unhelpful matching of named arguments (#110).
fct_lump()
gains w
argument (#70, @wilkox) to weight value
frequencies before lumping them together (#68).
as_factor()
and fct_inorder()
accept NA levels (#98).
fct_explicit_na()
also replaces NAs encoded in levels.
fct_lump()
correctly accounts for NA
values in input (#41)
lvls_revalue()
preserves NA levels.
Test coverage increased from 80% to 99%.
fct_drop()
now preserves attributes (#83).
fct_expand()
and lvls_expand()
now also take character vectors (#99).
fct_relabel()
now accepts objects coercible to functions
by rlang::as_function
(#91, @alistaire47)
as_factor()
which works like as.factor()
but orders levels by
appearance to avoid differences between locales (#39).
fct_other()
makes it easier to convert selected levels to "other" (#40)
fct_relabel()
allows programmatic relabeling of levels (#50, @krlmlr).
fct_c()
can take either a list of factors or individual factors (#42).
fct_drop()
gains only
argument to restrict which levels are dropped (#69)
and no longer adds NA
level if not present (#52).
fct_recode()
is now checks that each new value is of length 1 (#56).
fct_relevel()
gains after
argument so you can also move levels
to the end (or any other position you like) (#29).
lvls_reorder()
, fct_inorder()
, and fct_infreq()
gain an ordered
argument, allowing you to override the existing "ordered" status (#54).
Minor fixes for R CMD check
Add package docs