← Back to all sparks
D

dplyr

ANALYTICS
Velocity0.0

Grammar of data manipulation for R

After two quiet years dplyr widened its verb vocabulary in one release

rdata-manipulationtidyverseapi-expansionperformance
Current state
dplyr sat on patch releases from late 2023 until 1.2.0 landed in February 2026, and that release did a lot at once: a filter_out() counterpart to filter(), elementwise when_any() and when_all(), and three new recoding verbs alongside case_when(). It also rewrote if_else(), case_when() and coalesce() in C via vctrs, and promoted .by and reframe() from experimental to stable. The follow-up 1.2.1 is a compliance patch.
Where it's heading
The package is expanding its verb set deliberately, through published Tidyup design proposals rather than ad-hoc additions, and each new verb targets a case where the old idiom was error-prone - most obviously NA handling in negated filters. Underneath, hot paths keep moving from R into C, so the API grows while the runtime cost falls.
Prediction
Expect the remaining experimental surface to follow .by and reframe() toward stable, and further hot paths to be rewritten in C via vctrs. The two Tidyup proposals referenced here suggest more of the filter and recode families is still being designed.

Recent moves

  1. 4mo ago

    Full compliance with the R C API

    A one-line patch bringing dplyr into full compliance with the R C API. Invisible to users writing dplyr code, but it keeps the package clean against R's own interface rules.

    View source ↗
  2. 6mo ago

    filter_out(), when_any() and three recoding verbs land in 1.2.0

    ⚡ SPARK

    The release that ends the long 1.1.x stretch and widens dplyr's core vocabulary: filter_out(), when_any()/when_all(), and three new recoding verbs, plus a C rewrite of if_else(), case_when() and coalesce() and stable status for .by and reframe().

    View source ↗
  3. 2y ago

    Namespaced join_by() helpers and refreshed bundled datasets

    A patch release mixing real usability work - namespaced join_by() helpers, a specific error when a join would overflow - with refreshed storms and starwars datasets. Incremental polish on the 1.1 line.

    View source ↗
  4. 2y ago

    Deprecation message and setequal() consistency fixes

    Corrects deprecation messages for mutate_each() and summarise_each() and tightens setequal() to require compatible inputs like the other set operations. Consistency fixes only.

    View source ↗
  5. 3y ago

    All-NA join key fix and count() documentation

    Documentation for count()'s .drop argument, a join fix for all-NA key columns, and test compatibility with an upcoming waldo release. Routine patch work.

    View source ↗
  6. 3y ago

    Joins gain a relationship argument and warn far less often

    Mutating joins stop warning on one-to-many relationships and warn only on the genuinely dangerous many-to-many case, with a new relationship argument to state the expected cardinality. A meaningful correction to behaviour shipped only weeks earlier.

    View source ↗