Functionality improvements
Bug fixes
Deprecations
  • Using by = character() in joins is now deprecated. Users should instead use cross_join().
New functions
Functionality improvements
  • %in% falls back to base::'%in%' when input types aren’t compatible with vec_in() (@krterberg, #632)
  • relocate(): Can rename columns that are moved
  • Joins: Can now do cross joins by specifying by = character()
  • group_by(): Gains .add argument
  • ungroup(): Gains ... arguments
  • Printing of grouped tidytables now shows grouping variables
Bug fixes
Functions with notable speed improvements
Dotless functions!
  • tidytable now exports dotless versions of all functions (e.g. arrange()/mutate()/etc.).
  • verb.() syntax is still available to users for backwards compatibility.
    • Users can use both tidytable and dplyr by simply loading dplyr after tidytable, as the verb.() functions won’t be overwritten by dplyr.
New functions
Functionality improvements
Bug fixes
New Functions
Functionality improvements
Bug Fixes
Deprecations
  • arrange_across./mutate_across./summarize_across. are now defunct. They have been deprecated with warnings since v0.6.4 (Jul 2021). Users must now use across.() inside arrange.()/mutate.()/summarize.().
New functions
Functionality improvements
Breaking changes
  • count.(): Default name is now n instead of N to match dplyr semantics
Bug fixes
Functions with notable speed improvements
Other notes
  • tidytable no longer directly depends on lifecycle
New functions
Functionality improvements
  • summarize.(): Now sorts by the grouping variables when .by is used.
  • dt(): Experimental support for tidy evaluation
  • as_tidytable(): Now defaults to .name_repair = "unique" to relax restrictions on creating new tidytables
Functions with notable speed improvements
  • dt(): Faster when adding new columns or updating existing columns
  • as_tidytable(): Faster when converting data.frame or list objects to a tidytable
  • get_dummies.()
Bug fixes
  • across.(): .cols arg can find environment variables in custom functions (#389)
  • Joins: Duplicate columns are treated properly when keep = FALSE (#397)
  • Can use anonymous functions inside map functions inside mutate.() (#402)
Bug fixes
  • unite.(): New column is always placed before the first united column in the data frame, regardless of order provided.
  • Can use .data pronoun inside desc() in arrange.() (#371)
Functionality improvements
  • left/right/inner/full joins gain suffix and keep args (#354)
  • rename.(): Can now rename columns by position (#361)
  • unite.(): The new column is placed before united columns to match tidyr behavior
New functions
Functionality improvements
New functions
Bug fixes
  • mutate.(): Can assign to the same column when .by = character(0) (#332)
Functionality improvements
  • between() is now auto-translated to between.() when used inside tidytable functions
  • %notin% now uses %chin% on character vectors
Bug fixes
  • across.(): Can pass extra arguments to a list of functions (#319)
New functions
Bug fixes
  • Traceback error messages no longer unnecessarily print the full data frame (#305)
Functionality improvements
Deprecations
New functions
Functionality improvements
  • Subclasses and attributes are now preserved when using bind_cols, bind_rows, group_split, or joins.
  • complete.(): Added a .by argument
  • expand.(): Added a .by argument
  • mutate.(): Auto-names unnamed inputs
  • transmute.(): Auto-names unnamed inputs
Bug fixes
Functionality improvements
  • mutate.():
    • Added .keep argument
    • Added .before/.after arguments
  • tidytable(): Added .name_repair argument
Functions with notable speed improvements
New functions
Functionality improvements
  • group_split.(): Added a .named argument. If .named = TRUE, the resulting list will have names that indicate the group they are a part of.
  • pivot_longer.(): Can now use names_to = c(".value", NA) to drop the id column.
Bug fixes
New functions
Functionality improvements
  • replace_na.(): Can now replace NULL values in list-columns
  • Splicing lists using !!! now works in crossing.() and expand_grid.()
  • The following tidyverse functions are now automatically converted to their tidytable verb.() equivalents when used inside of tidytable’s mutate/arrange/filter/summarize/slice.
Bug fixes
Other news
  • tidytable has dropped the tibble package as a dependency and now uses pillar instead. tibble was originally used for its trunc_mat() function that enabled tidytables to print like tibbles do in console. pillar is the same package that tibble uses in the background.
New functions
Functionality improvements
Breaking changes
  • pivot_longer.(): values_drop_na is no longer the 5th argument in the function
  • pivot_wider.(): values_fn & values_fill args are no longer the 6th & 7th args
Functionality improvements
  • pivot_longer.()
    • New args: names_sep, names_pattern, names_ptypes, names_transform, names_repair, values_ptypes, values_transform, fast_pivot
    • fast_pivot arg: Faster pivoting. The “names” column will be a factor instead of character. Default is set to FALSE to match tidyverse semantics. Note: This option sets variable.factor = TRUE in data.table::melt(), which is what leads to it being faster.
  • pivot_wider.()
    • New args: names_prefix, names_glue, names_sort, names_repair
Deprecations
  • The dt_verb() versions of functions have been removed from the package. They have been deprecated with warnings since v0.5.2
Functionality improvements
Functions with notable speed improvements
Bug fixes
Breaking changes
  • bind_cols.(): Name repair uses vec_as_names() instead of vec_as_names_legacy()
Functionality improvements
New functions
Functions with notable speed improvements
Deprecations
Breaking changes
  • bind_rows.(): Removed .use_names and .fill args
    • These are now assumed to be TRUE, which matches dplyr semantics.
  • complete.(): .fill arg renamed to fill
  • pull.(): defaults to var = -1 instead of var = NULL
    • The result is the same when using the default value, but will break cases where var = NULL was explicitly called.
  • slice.(): .by must be named when slicing by group
Functionality improvements
  • tidytable now integrates better with tidyverse functions through vctrs. This means code such as vec_cbind(tibble::tibble(x = 1:3), tidytable(y = "foo")) will bind the results into a tidytable.
  • complete.(): Can now append extra values
  • pull.(): Numerical selection now works
  • slice.(): Now uses ... to select which rows to slice
New functions
Bug fixes
  • rename.(): Works when there are spaces in the column names (#109)
Functions with notable speed improvements
Breaking changes
Functionality improvements
Bug fixes
Internal
Breaking changes
  • bind_rows.()
    • use.names arg renamed to .use_names
    • fill arg renamed to .fill
Functionality improvements
  • replace_na.(): Now works on data.frame/data.table inputs as well as vectors
Deprecations
  • desc.() has been deprecated due to incompatibility with character columns
  • This version contains general performance improvements
Deprecations
  • Group by arg by has been deprecated for .by. This will allow “by” to be used as a column name in mutate.() & summarize.() in future releases.
  • All dt_verb() functions are soft deprecated
New functions
Functionality improvements
  • unnest.(): Added .keep_all arg to keep all list columns that were not unnested
Bug fixes:
  • Fixed distinct.() bug where it wasn’t returning unique rows
  • tidytable now works with quosures
  • tidyselect v0.1.1 compatibility: Updated functions to use where()
Functionality improvements
Deprecations
  • Old select helpers like everything.() are now replaced by normal helpers like everything()
  • rename_across/_if/_at/_all have been superseded by rename_with.()
Breaking changes
New functions
Functions with notable speed improvements
  • tidytable now utilizes tidyselect & vctrs
Breaking changes
  • get_dummies.(): cols arg defaults to c(is.character, is.factor). The result is the same, but is more consistent with other enhanced selection functions
  • mutate_across.(): .funs argument renamed to .fns to match dplyr 1.0
New functions
Functionality improvements
  • Paged printing now works in Rmarkdown
  • bind_rows.(): Does name checking and fills missing
  • distinct.(): Added .keep_all argument
  • fill.(): Preserves column order when using “by”
  • group_split.(): Added keep arg
  • nest_by.()
    • Can now unnest multiple columns in one call
    • data.tables in a list column can now have different ncols and different column order
  • select.(): Now allows column renaming
  • transmute.(): Summary functions (mean/max/etc.) can now be used
Functions with notable speed improvements
Bug fixes
  • group_split.(): Now returns a list of tidytables instead of data.tables
  • left_join.(): Now works with “by” columns of different names
New syntax
  • All functions are now written as verb.()
  • dt_verb() functions still work, but may be slowly deprecated in future releases
Functionality improvements
  • Enhanced selection now works in “by” calls
  • filter.() now works with “by”
  • pivot_wider.() can now be used with an aggregation function
  • pull.() defaults to last column in a data.table
New functions
Functions with notable speed improvements
tidytable class
  • New tidytable class is a data.table subclass with cleaner printing.
  • Operates like a data.table in all other cases.
  • All tidytable functions automatically convert to tidytable class in the background.
New functions
  • tidytable constructors:
  • dt_get_dummies(): Get dummy variables
  • dt_separate()
  • dt_pivot_longer() “cols” arg now defaults to dt_everything() instead of NULL. The result is the same, but is more consistent with other enhanced selection functions
  • .N now works when using dt_slice() & variants
  • Function length limit bug no longer occurs when using ~ in dt_map()
  • Updated dt() docs per CRAN instructions
Breaking changes
  • dt_mutate() & dt_rename() no longer modify-by-reference
  • dt_unnest_legacy() drops “keep” argument, but automatically keeps all non-nested columns.
    • New translation is ~5-10x faster than before
Functionality improvements
  • dt() now automatically converts data.frame input to a data.table
  • dt_mutate_across(): Added “by” arg
Bug fixes
  • dt_left_join() fix so columns are ordered correctly
  • Initial release