Patches a bug introduced in version 1.1.0 where excel_numeric_to_date()
would fail if given an input vector containing an NA
value.
excel_numeric_to_date()
again handles NA
correctly, in version 1.1.0 the function would error if any values of the input vector were NA
. (#220).This release was requested by CRAN to address some minor package dependency issues. It also contains several updates and additions described below.
The new function row_to_names()
handles the case where a dirty data file is read in with its names stored as a row of the data.frame, rather than in the names. This function sets the names of the data.frame to this row and optionally cleans up the rows above and including where the names were stored. Thanks to @billdenney for writing this feature.
excel_numeric_to_date()
can now convert fractions of a day to time, e.g., excel_numeric_to_date(43001.01, include_time = TRUE)
returns the POSIXlt value "2017-09-23 00:14:24"
. Thanks to @billdenney.
As part of excel_numeric_to_date()
now handling times, if a Date-only result is requested (the default behavior of include_time = FALSE
), any fractional part of the date is now removed. The printed date itself is identical, but the internal representation of this object now contains only the integer part of the date. For example, while under both the old and new versions of this function the call excel_numeric_to_date_old(42001.1)
would return the Date object "2014-12-28"
, calling as.numeric
on this Date result would previously return 16432.1
, while now it returns 16432
.
This an improved behavior, as now excel_numeric_to_date(42001.1, include_time = FALSE) == as.Date("2014-12-28")
returns TRUE, while previously it would appear to be equivalent from the printed value but this comparison would return FALSE.
A stable version 1.0.0, with a new tabyl
API and with breaking changes to the output of clean_names()
.
This builds on the original functionality of janitor, with similar-but-improved tools and significantly-changed implementation.
tabyl
tabyl()
is now a single function that can count combinations of one, two, or three variables, ala base R’s table()
. The resulting tabyl
data.frames can be manipulated and formatted using a family of adorn_
functions. See the tabyls vignette for more.
The now-redundant legacy functions crosstab()
and adorn_crosstab()
have been deprecated, but remain in the package for now. Existing code that relies on the version of tabyl
present in janitor versions <= 0.3.1 will break if the sort
argument was used, as that argument no longer exists in tabyl
(use dplyr::arrange()
instead).
clean_names
clean_names()
now detects and preserves camelCase inputs, allows multiple options for case outputs of the cleaned names, and preserves whether there’s space between letters and numbers. It also transliterates accented letters and turns #
into "number"
.
These changes may cause old code to break. E.g., a raw column name variableName
would now be converted to variable_name
(or variableName
, VariableName
, etc. depending on your preference), where previously it would have been converted to variablename
.
To minimize this inconvenience, there’s a quick fix for compatibility: you can find-and-replace to insert the argument case = "old_janitor"
, preserving the old behavior of clean_names()
as of janitor version 0.3.1 (and thus not have to redo your scripts beyond that.)
No further changes are planned to clean_names()
and its results should be stable from version 1.0.0 onward.
clean_names()
transliterates accented letters, e.g., çãüœ
becomes cauoe
(#120). Thanks to @fernandovmacedo.
clean_names()
offers multiple options for variable name styling. In addition to snake_case
output you can select smallCamelCase
, BigCamelCase
, ALL_CAPS
and others. (#131).
clean_names()
. And thanks to @maelle for proposing this feature.Launched the janitor documentation website: http://sfirke.github.io/janitor. Thanks to the pkgdown package.
remove_empty_rows()
and remove_empty_cols()
, which are replaced by the single function remove_empty()
. (#100)
remove_empty()
prints a message if no value is supplied for the which
argument; to suppress this, supply a value to which
, even if it’s the default c("rows", "cols")
.The new adorn_title()
function adds the name of the 2nd tabyl
variable (i.e., the name of the column variable). This un-tidies the data.frame but makes the result clearer to readers (#77)
round_half_up()
is now exported for public use. It’s an exact implementation of http://stackoverflow.com/questions/12688717/round-up-from-5-in-r/12688836#12688836, written by @mrdwab.tabyl
objects now print with row numbers suppressedclean_names()
now retains the character #
as "number"
in the resulting namesadorn_totals("row")
handles quirky variable names in 1st column (#118)get_dupes()
returns the correct result when a variable in the input data.frame is already called "n"
(#162)This is a bug-fix release with no new functionality or changes. It fixes a bug where adorn_crosstab()
failed if the tibble
package was version > 1.4.
Major changes to janitor are currently in development on GitHub and will be released soon. This is not that next big release.
The primary purpose of this release is to maintain accuracy given breaking changes to the dplyr package, upon which janitor is built, in dplyr version >0.6.0. This update also contains a number of minor improvements.
Critical: if you update the package dplyr
to version >0.6.0, you must update janitor to version 0.3.0 to ensure accurate results from janitor’s tabyl()
function. This is due to a change in the behavior of dplyr’s _join
functions (discussed in #111).
janitor 0.3.0 is compatible with this new version of dplyr as well as old versions of dplyr back to 0.5.0. That is, updating janitor to 0.3.0 does not necessitate an update to dplyr >0.6.0.
add_totals_row
and add_totals_col
were combined into a single function, adorn_totals()
. (#57). The add_totals_
functions are now deprecated and should not be used.adorn_crosstab()
is now “dat” instead of “crosstab” (indicating that the function can be called on any data.frame, not just a result of crosstab()
)%>%
pipe from magrittr (#107).Deprecated the following functions: - use_first_valid_of()
- use dplyr::coalesce()
instead - convert_to_NA()
- use dplyr::na_if()
instead - add_totals_row()
and add_totals_col()
- replaced by the single function adorn_totals()
adorn_totals()
and ns_to_percents()
can now be called on data.frames that have non-numeric columns beyond the first one (those columns will be ignored) (#57)adorn_totals("col")
retains factor class in 1st column if 1st column in the input data.frame was a factorclean_names()
now handles leading spaces (#85)adorn_crosstab()
and ns_to_percents()
work on a 2-column data.frame (#89)adorn_totals()
now works on a grouped tibble (#97)tabyl()
and crosstab()
(#87)NA_
column in the result of a crosstab()
will appear at the last column position (#109)tabyl()
and crosstab()
now appear in the package manual (#65)tabyl()
and crosstab()
failed to retain ill-formatted variable names only when using R 3.2.5 for Windows (#76)add_totals_row()
works on two-column data.frame (#69)use_first_valid_of()
returns POSIXct-class result when given POSIXct inputsSubmitted to CRAN!
tabyl()
for factor levels that aren’t present is now 0
instead of NA
(#48)mtcars %>% tabyl(mpg) %>% tabyl(n)
(#54)get_dupes()
now works on variables with spaces in column names (#62)adorn_crosstab()
that formats the results of a crosstab()
for pretty printing. Shows % and N in the same cell, with the % symbol, user-specified rounding (method and number of digits), and the option to include a totals row and/or column. E.g., mtcars %>% crosstab(cyl, gear) %>% adorn_crosstab()
.crosstab()
can be called in a %>%
pipeline, e.g., mtcars %>% crosstab(cyl, gear)
. Thanks to [@chrishaid](https://github.com/chrishaid) (#34)tabyl()
can also be called in a %>%
pipeline, e.g., mtcars %>% tabyl(cyl)
(#35)use_first_valid_of()
function (#32)ns_to_percents()
, add_totals_row()
, add_totals_col()
,crosstab()
returns 0 instead of NA when there are no instances of a variable combination.tabyl(df$vecname)
retains the more-descriptive $
symbol in the column name of the result - if you want a legal R name in the result, call it as df %>% tabyl(vecname)
clean_names()