# crane 0.3.2

## New Functions and Functionality

* Added `g_lineplot()` for creating line plots with optional summary statistics table. Includes helper functions `calc_stats()`, `g_lineplot_table()`, and `preprocess_lineplot_data()`.

* Added `ard_tabulate_abnormal_by_baseline()` for creating an Analysis Results Data (ARD) object counting participants with abnormal assessments, stratified by their baseline status.

* Added `tbl_mmrm()` and `get_mmrm_results()` functions to create regression tables for Mixed Models for Repeated Measures (MMRM). (#163)

* Added `gg_mmrm_lineplot()` to create line plots of MMRM results. (#181)

* Added `gg_pkc_lineplot()` to create line plots for PK data. (#185)  

* Added `annotate_gg_pkc()` to add optional summary statistics table to 
`gg_pkc_lineplot()`. (#189)

* Refactored the underlying `data.frame` alignment and rendering methodology used for plot annotations. Functions for table annotation now use a completely rebuilt engine that ensures X-axis synchronization for stacked tables (`annotate_riskdf()`) and flexible, reliable placement for floating tables (`annotate_surv_med()`, `annotate_coxph()`). (#189)

* Refactored functions for lineplot plotting - added `gg_lineplot()` and `annotate_gg()` to create lineplots and annotate summary statistics table. (#184)

* Added functions `reverse_ci()`, `reverse_rate_difference()` to reverse confidence intervals and rate differences in tables from `add_row_difference()`. (#204)

* `g_lineplot()`, `g_lineplot_table()`, and `preprocess_lineplot_data()` were deprecated. (#184)

* Added `tbl_coxph()` to render pairwise Cox proportional hazards results as a gtsummary table. (#159)

* Added `tbl_hierarchical_incidence_rate()` which computes the incidence rate of adverse events (#211)

* Added `adjust_stat_columns_wrap()` which keep the presentation of statistics in one row (#219)

* `get_cox_pairwise_df()` now allows for different methods to compute p-value (#191) and to handle ties (#193).

* `tbl_coxph()` now accepts a data.frame created by `get_cox_pairwise_df()` as input. (#207)

* Added `add_grade_column()` to inject a grade-label column into `tbl_hierarchical_rate_by_grade()` output. Decoupled from the table builder to prevent Cartesian join explosion in `tbl_merge()`. (#226)

* `get_cox_pairwise_df()` now fully supports `strata()` terms in survival formulas (#256).

* The `"likelihood-ratio"` test now intelligently switches between `survival::survreg()` (for unstratified models) and `survival::coxph()` (for stratified models) (#256).

* Stripped package namespace prefixes (e.g., `survival::`) from survival formulas to prevent evaluation errors (#256).

* Added `...` support in `get_cox_pairwise_df()` for `conf.int` (e.g., to adjust CI level) and `robust = TRUE` (for robust standard errors).

### Other Updates

* `tbl_hierarchical_rate_and_count()` now emits zero-rows for unobserved factor levels in the first hierarchical variable. (#233)

* `df2gg_aligned()` and `df2gg_floating()` now preserve original ggplot objects in `attr(result, "plotlist")` for downstream data extraction after combining with `cowplot`. (#208)

* Remove warning when data has more levels than needed for grade_groups on tbl_hierarchical_rate_by_grade.

* Changed the default `conf.type` from `"log"` to `"plain"` (linear) in `tbl_survfit_times()` and `tbl_survfit_quantiles()` to align with GDSR guidelines. (#173)

* Removed bold from headers when using `tbl_strata()` (#133).

* Unified border width in `theme_gtsummary_roche()` to 0.5 for header. (#154)

* Added example on how to stratify `tbl_baseline_chg()` by `PARAM` and split into a list.

* Adjusted `tbl_mmrm()` to allow `base_df = NULL`.

* Fixed two bugs related to summary statistics calculation in `ard_tabulate_abnormal_by_baseline()`. (#198)

* Fixed a bug in `gg_pkc_lineplot()` causing misplaced error bars on a log scale. (#199)

* Adjusted `gg_pkc_lineplot()` to use `tbl_roche_summary()` for automatic decimals formatting.

* Adjusted `tbl_hierarchical_incidence_rate()` to handle first event as well as
all events (#217)

* Adjusted `tbl_baseline_chg()` to allow for custiomization of display statistics (#222)

* Changed baseline statistic argument in `tbl_baseline_chg()` (#224)

* Adjusted `modify_zero_recode()` to account for strings comprising regular and non-breaking spaces (#230)

* `tbl_roche_subgroups()` now shows `n`, `Events`, and `Median` per arm when `time_to_event` is specified. The total column shows `Total Events` instead of `Total n`. (#235)

* Skip tests if suggested packages are missing (Failing test due to missing suggested package #252, @llrs-roche)

* The default `"log-rank"` test now uses `survival::survdiff()` instead of `coin`, aligning output more closely with SAS and `rtables`

# crane 0.3.1

## New Functions and Functionality

* Added `tbl_roche_subgroups()` for subgroup analysis.

* Added `g_forest` to create forest plot.


# crane 0.3.0

## New Functions and Functionality

* Added `tbl_null_report()` for cases without any information to display. (#11)

* Added functions `style_roche_number()` and `label_roche_number()` to replace their respective gtsummary versions, with additional `inf` argument for customization of `Inf`/`-Inf`/`NaN` values.

* Added `gg_km()` function for creating Kaplan-Meier plots.

* Added `tbl_subgroups` and `g_forest` to make subgroup analysis and forest plots.

* Added `list("assign_summary_type-arg:cat_threshold" = 0L)` to `theme_gtsummary_roche()`. Numeric variables with few levels will no longer default to summary type `'categorical'` in `gtsummary::tbl_summary()` and `tbl_roche_summary()`. (#79)

### Other Updates

* Updated variable processing in `tbl_baseline_chg()` to allow for non-string input. (#114)

* Updated details about the `sort_hierarchical()` and `filter_hierarchical()` functions in the hierarchical tables article. (#116)

* Added the `label` argument to `tbl_hierarchical_rate_and_count()` to set hierarchy variables labels in the table header. (#118)

### Bug Fixes

* Fixed `remove_duplicate_keys()` to remove non-unique column values when the key columns are a mix of unique and duplicated entries. (#129)

# crane 0.2.0

## New Functions and Functionality

* The `tbl_demographics()` function has been renamed to `tbl_roche_summary()` with the following updates. (#73).

  * Updated `tbl_roche_summary()` to convert cells with `"0 (0.0%)"` to `"0"`.
  
  * Update the `tbl_roche_summary()` returned `inputs` list to match the `tbl_roche_summary()` argument inputs, whereas it previously returned the `tbl_summary()` inputs. (#31)
  
  * Changed the default header in `tbl_roche_summary()` tables from `**Characteristic**` to an empty string.
  
  * Fix in `tbl_roche_summary()` when a variable is all `NA` within a stratum. The zero count was displayed as `"0 (NA%)"` instead of `"0"`. (#60)

* Added function `tbl_hierarchical_rate_by_grade()` to summarize adverse event rates by highest toxicity grade. (#46)

* Adding the `modify_zero_recode()` function that recodes `"0 (0.0%)"` to `"0"` in summary tables.

* Adding the `modify_header_rm_md()` function to remove bold and italic markdown syntax from the headers of a gtsummary table. (#53)

* Adding `tbl_hierarchical_rate_and_count()` and associated S3 method `add_overall()` to summarize hierarchical event rates and counts. (#36)

* Added `tbl_survfit_quantiles()` and `add_overall.tbl_survfit_quantiles()` to create a table of survival quantiles. (#19)

* Adding `tbl_survfit_times()` and `add_overall.tbl_survfit_times()`

* Adding `tbl_baseline_chg()` function. (#62)

* Added function `tbl_shift()` for easing the creation of shift tables. (#83)

* Added `style_roche_percent()` and `label_roche_percent()` functions.

* Added formatting functions `style_roche_ratio()` and `label_roche_ratio()`. (#91)

* Added `variables` and `row_numbers` arguments to the `add_blank_rows()` function. (#45)

* Re-coding `0 / 0 (NA%)` to `0 / 0` in `modify_zero_recode()`. (#85)

## Other Updates

* Added an article giving an overview of the {crane} package. (#37)

* The {gtsummary} is now loaded with {crane}.

* Updated Roche theme to bold headers for `flextable` outputs.

* Updated Roche theme to include parentheses around Ns in header, and updated function defaults to include the parentheses in crane functions.

* Updated `theme_gtsummary_roche()` to further style results from `gtsummary::tbl_hierarchical*()` functions.

* Added `theme_gtsummary_roche(font_size, print_egine)` arguments to control the default font size and the print engine.

* Updated Roche theme to use `style_roche_percent()` as the default function to format percentages.

* Added additional {flextable} specs for `theme_gtsummary_roche()`. Mainly border line width (0.5) and footer font size (`font_size` - 1).

# crane 0.1.0

* Initial release
