

Group_by() uses the ungrouped data for the implicit mutate step ( #5598). Mutate() and friends preserves row names in data frames once more ( #5418). Improved performance with many columns, with a dynamic data mask using active bindings and lazy chops ( #5017). Inner_join() gains a keep parameter for consistency with the other mutating joins ( #5581). Removed default fallbacks to lazyeval methods this will yield better error messages when you call a dplyr function with the wrong input, and is part of our long term plan to remove the deprecated lazyeval interface. Group_by(.drop = FALSE) preserves ordered factors ( #5545). Summarise() no longer informs when the result is ungrouped ( #5633). Row-wise data frames of 0 rows and list columns are supported again ( #5804). Removed the name argument from the compute() generic ( #5783). Select() no longer creates duplicate variables when renaming a variable to the same name as a grouping variable ( #5841).ĭplyr_col_select() keeps attributes for bare data frames ( #5294, #5831).įixed quosure handling in dplyr::group_by() that caused issues with extra arguments (tidyverse/lubridate#959). This is slightly more performant and will allow more optimisations in the future.įixed issue in bind_rows() causing lists to be incorrectly transformed as data frames ( #5417, #5749).

in top-level across() calls ( #5813, #5832).Īcross() now inlines lambda-formulas. This greatly improves performance with grouped data frames.įixed behaviour of. Multiple calls to if_any() and/or if_all() in the same expression are now properly disambiguated ( #5782).įilter() now inlines if_any() and if_all() expressions. If_any() and if_all() abort when a predicate is mistakingly used as. The deprecated trunc_mat() is no longer reexported from dplyr ( #6141).
Memory clean 3 1.0.7 install#
Slice() now indicates which group produces an error ( #5931).Ĭur_data() and cur_data_all() don’t simplify list columns in rowwise data frames ( #5901).ĭplyr now uses rlang::check_installed() to prompt you whether to install required packages that are missing. Slice() helpers ( slice_head(), slice_tail(), slice_min(), slice_max()) now accept negative values for n and prop ( #5961). keep options ( #6086).įilter() forbids matrix results ( #5973) and warns about data frame results, especially data frames created from across() with a hint to use if_any() or if_all(). mutate(.keep = "none") has been changed to ensure that pre-existing columns are never moved, which aligns more closely with the other. transmute() has not been changed, and completely ignores the column ordering of the existing data, instead relying on the ordering of expressions supplied through. Mutate(.keep = "none") is no longer identical to transmute(). The rows_*() functions now fail elegantly if y is a zero column data frame and by isn’t specified ( #6179).īetter display of error messages thanks to rlang 1.0.0. This behavior was documented, but previously wasn’t being applied correctly ( #6240). The rows_*() functions now always retain the column types of x. Only the columns specified through by will be utilized from y, all others will be dropped with a message. Rows_delete() no longer requires that the columns of y be a strict subset of x.

By default, an unmatched key results in an error, but you can now also "ignore" these y rows ( #5984, #5699). This is very similar to the ON CONFLICT DO NOTHING command from SQL ( #5588, with helpful additions from and rows_patch(), and rows_delete() gained a new unmatched argument allowing you greater control over rows in y with keys that are unmatched by the keys in x. By default, a conflict results in an error, but you can now also "ignore" these y rows. A conflict arises if a key in y already exists in x. Rows_insert() gained a new conflict argument allowing you greater control over rows in y with keys that conflict with keys in x. Relaxing this restriction should make these functions more practically useful for data frames, and alternative backends can enforce this in other ways as needed (i.e. through primary keys) ( #5553). Additionally, rows_insert() and rows_delete() no longer require that the key values in y uniquely identify each row. The rows_*() functions no longer require that the key values in x uniquely identify each row. New rows_append() which works like rows_insert() but ignores keys and allows you to insert arbitrary rows with a guarantee that the type of x won’t change ( #6249, thanks to for the implementation and for the idea).
