Create a column of date ranges
Description
If both start
and end
are passed as 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.
Usage
pl$date_ranges(
start,
end,
interval = "1d",
...,
closed = c("both", "left", "none", "right")
)
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. Must consist of full days.
|
…
|
These dots are for future extensions and must be empty. |
closed
|
Define which sides of the range are closed (inclusive). One of the
following: “both” (default), “left” ,
“right” , “none” .
|
Value
A polars expression
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 = rep(as.Date("2022-01-03"), 3)
)
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 │
#> └────────────┴────────────┴──────────────────────────┘