Releases: DanChaltiel/crosstable
crosstable v0.8.0
New features
- Remove percents when N=0 with
crosstable(remove_zero_percent=TRUE)
(#78). - Better header for multi-by flextables
as_flextable(ct, remove_header_keys=TRUE)
(#74). - Control font size with
body_add_normal(font_size)
andcrosstable_options(normal_font_size)
(#65). - Option control on height & width in
body_add_gg2()
(#68).
Bug fixes and improvements
- Add envir argument to functions that call
glue()
(#83). - Better error when
x
isNULL
inbody_add_table_section()
(#82). - Warn if
by
is "" (#77). - Default to quiet warnings if columns are missing (#76).
- Moved the legend above the table in
body_add_table_section()
(#73). - Fixed
get_label()
on named vector columns (#72). - Fixed
crosstable(drop_levels)
(#69, #70, #71). - Flextable autofit now uses the recommended method (#62).
transpose()
will work on multi-by crosstables (#60).- Fixed a bug happening when NA is already a level (#59).
- Fixed error where
by
contains "label" (#56). - Fixed
as_flextable(header_show_n)
not working in singleby
(#54). - Fixed some missing options in
crosstable_options()
and added tests (#53).
crosstable v0.7.0
New features
- New officer helper
body_add_table_section()
, which adds a table (crosstable or flextable) which can be surrounded by a title (level 3 by default), a legend, and/or a short sentence. set_label()
now accepts a function as a value (e.g.set_label(mtcars2, toupper)
).- Argument
format_fixed(scientific)
can now beFALSE
to force standard format. Can be set throughoptions(crosstable_scientific_log=FALSE)
(#49). - New argument
format_fixed(epsilon)
to format values as"<epsilon"
. Can be set throughoptions(crosstable_format_epsilon=0.001)
. - Markdown implementation has improved, with support of crossing patterns (#26), newline tokens (#30), and many new tags (#51).
You can now usebody_add_normal("Here is **`some code` in bold & *italic* ** <br> And here is <color:red>red text</color>.")
See?body_add_normal
for more insight.
Bug fixes and improvements
- Reimplement description of columns containing both
NA
(missing values) and "NA" (characters) (#42). - Argument
as_flextable(by_header)
can now be set throughoptions(crosstable_by_header=FALSE)
to remove all headers. - Argument
body_add_crosstable(header_fontsize)
now defaults to1.2*body_fontsize
. - Adds an error message in
as_flextable()
when the crosstable is empty (#41). - Fixes a regression where references were not added anymore.
crosstable 0.6.1
Fixes for CRAN checks.
crosstable v0.6.0
New features
-
New function
transpose_crossable()
(or simplyt()
), which transposes a crosstable so that the labels and column names are swapped.ct = crosstable(mtcars2, c(mpg, drat, wt, qsec)) t_ct = t(ct) as_flextable(t_ct)
-
New function
pivot_crossable()
, which pivots a crosstable so that thevariable
column is spread as several columns.ct = crosstable(mtcars2, c(mpg, drat, wt, qsec)) p_ct = pivot_crosstable(ct) as_flextable(p_ct)
-
body_add_table_list()
now replacesbody_add_crosstable_list()
andbody_add_flextable_list()
. It allows both crosstables and flextable (and even dataframes, which are turned to flextables first) and has a new argumentfun_after
to control what comes after the table. See examples in?body_add_table_list
. -
New function
get_percent_pattern()
. See also the new vignettevignette("percent_pattern")
. -
New argument
crosstable(drop_levels=TRUE)
to drop unused levels in factors. -
copy_label_from()
now works on dataframes as well. -
as_flextable(header_show_n_pattern)
can now be a list of namescell
andtotal
, so that the "Total" column can be labelled too.
Breaking changes (minor)
-
showNA="no"
is now consistent withstats::addmargins()
,gtsummary::tbl_cross(missing="no")
, andjanitor::tabyl(show_na=FALSE)
. It now actually removes allNA
from the equation, instead of not doing much (#24). -
In
percent_patern
, the proportion relative to the total samplep_cell
has been renamed top_tot
for clarity.
Bug fixes and improvements
- Removed unexpected warning "NaNs produced" thrown when calculating percentages in totals while the number of NA is higher than the other classes (#20).
- The output is now correct when
header_show_n=TRUE
andremove_header_keys=TRUE
while using multiple by variables (#21). - Flextables will not have missing columns when using multiple by variables that has same key levels.
- String interpolation works as intended in
body_add_xxx_legend()
. crosstable()
will not fail iffisher.test()
fails [#28]forcats::fct_explicit_na()
is not used anymore [#29]body_add_normal()
now removes ``` symbols when showing code [#31]- Trailing commas will not make
apply_labels()
fail anymore [#32] - Performance improvement (around 30% for small tables) as confidence intervals are not calculated anymore when not needed [#34]
Many thanks to Stephan Daus (@sda030) for his bug reports and feedback on this release.
crosstable v0.5.0
New features
- New
clean_names_with_labels()
which cleans the names of the dataframe but keeps the old names as labels. Obviously inspired by{janitor}
. - New variables
n_col
,n_row
, andn_tot
available forpercent_pattern
. Also, every variable has now its counterpart with the_na
suffix which accounts for missing values.
For instance, one can now write:
crosstable(mtcars2, cyl, percent_pattern="{p_col} ({n}/{n_col}) [95%CI: {p_col_inf}; {p_col_sup}]")
crosstable(mtcars2, cyl, percent_pattern="{p_col_na} ({n}/{n_col_na}) [95%CI: {p_col_inf}; {p_col_sup}]")
percent_pattern
can now be a list of characters with namesbody
,total_row
,total_col
, andtotal_all
to also control the pattern in other parts of the crosstable than the body.
Improvements
crosstable_options()
does not need the "crosstable_" prefix anymore, so the autocomplete is less clumsy. Options with the prefix will still work though.crosstable_options(reset=TRUE)
is deprecated in favor of the newcrosstable_reset_options()
.crosstable_test_args()
andcrosstable_effect_args()
now have arguments to easily control the non-default parameters.- Allow scientific notation for big numbers. Default to numbers for
which abs(log10(x))>4
. This can be controlled using options, e.g.crosstable_options(scientific_log=5)
. - In MS Word, crosstables will now break across pages by default. You can revert this by using
body_add_crosstable(allow_break=FALSE)
or usingcrosstable_options()
. This is the pendant ofkeepnext
in officer/flextable. - New argument
body_add_crosstable(max_cols=25)
, which limits the size of crosstables in Word documents. This prevents very large tables to be wrongly included. peek()
is now usable on non-crosstable objects as well.as_flextable()
method will be applied on the object if available, otherwiseflextable()
will be applied.- Better error messages in
import_labels()
whendata_label
doesn't have the right columns.
Deprecations
rename_dataframe_with_labels()
is now deprecated in favor of the better namedrename_with_labels()
.compact()
is now deprecated in favor ofct_compact()
to avoid the conflict withpurrr::compact()
. It will be removed in the next version.
Bug fixes
body_add_crosstable(..., parse=NULL)
will now work as intended .by_header
can replace the "value" column ifby
has only one stratum, in bothas_gt()
andas_flextable()
(#9).percent_pattern
can now contain functions that start by "p" (#10).percent_pattern
is actually taken into account whenby
has one single level (#13).import_labels()
now works even if there is a missing value in the dataframe.- Minor other bugfixes
crosstable v0.4.0
New features
- You can now use basic markdown formats in
body_add_normal()
: **bold**, *italic*, _underlined_, and `code
`. - New
keep_id
argument incompact.crosstable()
, which enablesas_flextable(compact=TRUE, keep_id=TRUE)
- You can use
as_flextable(header_show_n_pattern)
to change the glue pattern of these group sizes. The default is{.col} (N={.n})
; you can use{.col_key}
and{.col_val}
whenby
has multiple strata. - Functions
body_add_table_legend()
andbody_add_figure_legend()
earn an argumentlegend_prefix
. Useful when set through global options, for instance to make every table/figure start with the name of the study. crosstable_options()
can handle new options for all those new features.
Improvements
- You can now set normal style directly in
body_add_normal()
(it was only doable through options before). - Removed the "variable" header in compacted crosstables.
- Dataset
mtcars2
is now a tibble, with its rownames as a column named "model". as_flextable(by_header=FALSE)
now removes the group header (ifby
has only one stratum).as_flextable(header_show_n)
now also works ifby
has multiple strata.as_flextable(header_show_n=TRUE)
adds group size for all groups.
Bug fixes
- Fixed a bug when numeric variables are treated as categorical (failed if one had a
NA
value). - Fixed a bug that caused
body_add_normal()
to add an extra empty paragraph if there was a reference in the text. - Fixed a bug so that
body_add_normal()
can be used without argument. - Fixed a bug in
effect=TRUE
when some groups were present intable()
but not inglm()
due to missing values.
crosstable 0.3.2
New features
- Global options management is now easier thanks to
crosstable_options()
and autocompletion. Almost every argument can now be set using options. See?crosstable_options
for further details. - You can also use
crosstable_peek_options()
to see which crosstable option is currently set. - New argument
num_digits
incrosstable()
. It was about time! - New argument
header_show_n
foras_flextable()
, which adds the group size (N=xx
) to the header of the flextable. - New arguments (and global options)
par_before
andpar_after
in respectivelybody_add_table_legend()
andbody_add_figure_legend()
, which add an empty paragraph before/after the legend (for readability). - New function for {officer}:
body_replace_text_at_bkms()
, to replace several bookmarks at once. - New global option
crosstable_options(crosstable_zero_percent=FALSE)
, which removes percentages whenevern==0
(as it would always be 0%). I should add it as an argument ofcrosstable()
one day...
Improvements
- Better sorting when numeric variables are treated as categorical (before, 10 was sorted before 2).
- Removed the labelled class which caused too many problems for little to no improvement. See larmarange/labelled#111.
Bug fixes
- fixed a bug in
crosstable()
occurring when one offuns
does not have ellipsis (...) andfuns_arg
contains an unused argument.
crosstable 0.3.1
New features
- New parameter
percent_pattern
in replacement ofcrosstable(margin=x)
for better control over proportion format. Introduces the possibility of displaying confidence intervals (using Wilson score method) along with proportions. - New function
body_add_crosstable_list()
to add a list of crosstables all at once, separated by some customizable titles. Also works with flextables and plain old dataframes. - New argument
crosstable_padding_v
foras_flextable()
to manage vertical padding. Also available as the global optioncrosstable_padding_v
. - New global options
crosstable_{arg}
for almost all arguments. See?crosstable_options
for more details.
Bug fixes
- fixed a bug in
as_flextable()
occurring whenshowNA=TRUE
(header row was disappearing) - fixed a bug occurring very randomly, when rounding caused
format_fixed()
to return a numeric value ("Error: Can't combine..1$value
and..2$value
.") - crosstable now shows all unused levels in
by
when it is a factor - removed extra bold columns in compacted crosstables displayed as flextables
Internal
- renamed branch
master
tomain
- use a lot more snapshots in tests
crosstable 0.2.2
New features
- Added support for multiple
by
! You can now writecrosstable(mtcars, c(mpg, gear), by=c(am, vs)) %>% as_flextable()
. - Added a macro that can autofit every table in the document at once. This macro can be generated using the function
generate_autofit_macro()
which creates a file that should then be imported into MS Word. body_add_crosstable()
gains apadding_v
argument to control the vertical padding of all rows.body_add_title()
andbody_add_xxx_legend)
gain a glue functionality. You can now writebody_add_title("The iris dataset (nrow={nrow(iris)})", 1)
.as_workbook()
can now take a named list of crosstables, that will be considered as sheets.- New parameter
percent
informat_fixed(percent=TRUE/FALSE)
to easily format percentages.
Minor changes
style
is deprecated inbody_add_table_legend()
andbody_add_image_legend()
in favor ofname_format
.- Changed the behaviour of some
effect
calculations that were done by column instead of rows. That might change some outputs but not their meaning. body_add_normal()
now removes duplicated spaces (squish) in its input by default. Usesquish=FALSE
to override.docx_bookmarks2()
gains atarget
parameter.
Bug fixes
effect
calculation now takes into account the reference level (first level of a factor).body_add_crosstable()
rightly takesbody_fontsize
andheader_fontsize
into account.- Added few more warnings, so that you know what went wrong.
Internal
- burgled 2 functions using
burglr::burgle()
to avoid dependency:nortest::ad.test()
andDescTools::CochranArmitageTest()
. - fixes the bug from the breaking change in
testthat
(#3).
crosstable 0.2.1
- First version on CRAN
- Improved functions naming in
funs
, especially with multiple combinations of named and unnamed functions, including lambda or anonymous - Use
simplify=FALSE
inget_label()
to get a list instead of a vector