Skip to content

Generate a list containing a date range

Source code

Description

If both start and end are passed as the Date types (not Datetime), and the interval granularity is no finer than “1d”, the returned range is also of type Date. All other permutations return a Datetime. Note that in a future version of Polars, pl$date_ranges() will always return Date. Please use pl$datetime_ranges() if you want Datetime instead.

Usage

pl$date_ranges(start, end, interval = "1d", ..., closed = "both")

Arguments

start Lower bound of the date range. Something that can be coerced to a Date or a Datetime expression. See examples for details.
end Upper bound of the date range. Something that can be coerced to a Date or a Datetime expression. See examples for details.
interval Interval of the range periods, specified as a difftime object or using the Polars duration string language. See the Polars duration string language section for details.
Ignored.
closed Define which sides of the range are closed (inclusive). One of the followings: “both” (default), “left”, “right”, “none”.

Value

An Expr of data type List(Date) or List(Datetime)

Polars duration string language

Polars duration string language is a simple representation of durations. It is used in many Polars functions that accept durations.

It has the following format:

  • 1ns (1 nanosecond)
  • 1us (1 microsecond)
  • 1ms (1 millisecond)
  • 1s (1 second)
  • 1m (1 minute)
  • 1h (1 hour)
  • 1d (1 calendar day)
  • 1w (1 calendar week)
  • 1mo (1 calendar month)
  • 1q (1 calendar quarter)
  • 1y (1 calendar year)

Or combine them: “3d12h4m25s” # 3 days, 12 hours, 4 minutes, and 25 seconds

By "calendar day", we mean the corresponding time on the next day (which may not be 24 hours, due to daylight savings). Similarly for "calendar week", "calendar month", "calendar quarter", and "calendar year".

See Also

pl$date_range() to create a simple Series of data type Date.

Examples

library(polars)

df = pl$DataFrame(
  start = as.Date(c("2022-01-01", "2022-01-02", NA)),
  end = as.Date("2022-01-03")
)

df$with_columns(
  date_range = pl$date_ranges("start", "end"),
  date_range_cr = pl$date_ranges("start", "end", closed = "right")
)
#> shape: (3, 4)
#> ┌────────────┬────────────┬─────────────────────────────────┬──────────────────────────┐
#> │ start      ┆ end        ┆ date_range                      ┆ date_range_cr            │
#> │ ---        ┆ ---        ┆ ---                             ┆ ---                      │
#> │ date       ┆ date       ┆ list[date]                      ┆ list[date]               │
#> ╞════════════╪════════════╪═════════════════════════════════╪══════════════════════════╡
#> │ 2022-01-01 ┆ 2022-01-03 ┆ [2022-01-01, 2022-01-02, 2022-… ┆ [2022-01-02, 2022-01-03] │
#> │ 2022-01-02 ┆ 2022-01-03 ┆ [2022-01-02, 2022-01-03]        ┆ [2022-01-03]             │
#> │ null       ┆ 2022-01-03 ┆ null                            ┆ null                     │
#> └────────────┴────────────┴─────────────────────────────────┴──────────────────────────┘
# provide a custom "end" value
df$with_columns(
  date_range_lit = pl$date_ranges("start", pl$lit(as.Date("2022-01-02")))
)
#> shape: (3, 3)
#> ┌────────────┬────────────┬──────────────────────────┐
#> │ start      ┆ end        ┆ date_range_lit           │
#> │ ---        ┆ ---        ┆ ---                      │
#> │ date       ┆ date       ┆ list[date]               │
#> ╞════════════╪════════════╪══════════════════════════╡
#> │ 2022-01-01 ┆ 2022-01-03 ┆ [2022-01-01, 2022-01-02] │
#> │ 2022-01-02 ┆ 2022-01-03 ┆ [2022-01-02]             │
#> │ null       ┆ 2022-01-03 ┆ null                     │
#> └────────────┴────────────┴──────────────────────────┘