← Back to all sparks
T

tidypolars

ANALYTICS
Velocity0.0

More Efficient Tidyverse Code, Using Polars in the Background

tidypolars is grinding toward complete dplyr coverage, one supported function at a time

polarsrdplyrdataframeslazy evaluationtidyverse
Current state
tidypolars lets you write dplyr and tidyr syntax against Polars DataFrames and LazyFrames. Its releases follow a fixed shape: raise the required polars version, add a handful of newly supported R functions and arguments, fix places where behaviour diverges from dplyr. Recent additions run from %notin% and as.integer() to .before/.after in mutate() and time zone handling in datetime parsing. Cadence is roughly every six to ten weeks and has not varied.
Where it's heading
Coverage is the whole strategy, and the target has been widening from dplyr into tidyr — unnest_longer_polars(), separate_longer_delim_polars() and separate_longer_position_polars() bring list-column and string-splitting verbs that have no Polars-idiomatic equivalent in the tidyverse dialect. The other consistent thread is fidelity: distinct() dropping unselected columns, summarize() dropping the last group, relocate() honouring tidy-select helpers, NULL in mutate() behaving as dplyr does. Each of these is a small breaking change made to match the reference rather than to differ from it.
Prediction
The pattern of tracking the polars floor upward every release and following tidyverse changes closely — .by in fill() arrived when tidyr 1.3.2 shipped it — suggests the next releases continue mirroring new dplyr and tidyr arguments rather than adding a distinct capability.

Recent moves

  1. 1mo ago

    tidypolars 0.19.0

    A standard coverage release against polars >= 1.13.0: %notin%, as.integer(), .before/.after in mutate() and time zone support in datetime parsing, plus fidelity fixes to .keep, NULL-drops in mutate() and tidy-select handling in relocate(). Nothing structural, which is the point — the value is the shrinking gap with dplyr.

    View source ↗
  2. 4mo ago

    tidypolars 0.18.0

    More of the same grind: anyNA(), cummax() and trunc() gain support, sort() and rank() pick up their remaining arguments, and count()/add_count() accept expressions. The better filter() error when someone writes = instead of == is the kind of detail that decides whether a translation layer feels native.

    View source ↗
  3. 6mo ago

    tidypolars 0.17.0

    A cleanup release: describe(), describe_plan() and describe_optimized_plan(), deprecated since 2024, are removed, and make_unique_id() is deprecated because the underlying Polars function does not guarantee stable results across versions. That last note is honest about a limit the wrapper cannot paper over.

    View source ↗
  4. 6mo ago

    tidypolars 0.16.0

    The clearest push past dplyr into tidyr: unnest_longer_polars() for list-columns and separate_longer_delim_polars()/separate_longer_position_polars() for splitting strings into rows, all with their tidyr parameters. These are reshaping verbs with no direct Polars idiom, so they widen what the package translates rather than deepening what it already covered.

    View source ↗
  5. 9mo ago

    tidypolars 0.15.1

    A polars floor bump and nothing else — the shortest release note in the package's history.

    View source ↗
  6. 9mo ago

    tidypolars 0.15.0

    Partitioned output arrives: partition_by_key() and partition_by_max_size() can be passed to the sink_*() path argument to write a LazyFrame across several files, with mkdir creating the directories. distinct() also changes to keep only selected columns, matching dplyr and breaking anyone relying on the old behaviour.

    View source ↗