Skip to contents

Turns implicit missing values into explicit missing values. This is useful for completing missing combinations of data.

Usage

# S3 method for class 'RPolarsDataFrame'
complete(data, ..., fill = list())

# S3 method for class 'RPolarsLazyFrame'
complete(data, ..., fill = list())

Arguments

data

A Polars Data/LazyFrame

...

Any expression accepted by dplyr::select(): variable names, column numbers, select helpers, etc.

fill

A named list that for each variable supplies a single value to use instead of NA for missing combinations.

Examples

df <- polars::pl$DataFrame(
  group = c(1:2, 1, 2),
  item_id = c(1:2, 2, 3),
  item_name = c("a", "a", "b", "b"),
  value1 = c(1, NA, 3, 4),
  value2 = 4:7
)
df
#> shape: (4, 5)
#> ┌───────┬─────────┬───────────┬────────┬────────┐
#> │ group ┆ item_id ┆ item_name ┆ value1 ┆ value2 │
#> │ ---   ┆ ---     ┆ ---       ┆ ---    ┆ ---    │
#> │ f64   ┆ f64     ┆ str       ┆ f64    ┆ i32    │
#> ╞═══════╪═════════╪═══════════╪════════╪════════╡
#> │ 1.0   ┆ 1.0     ┆ a         ┆ 1.0    ┆ 4      │
#> │ 2.0   ┆ 2.0     ┆ a         ┆ null   ┆ 5      │
#> │ 1.0   ┆ 2.0     ┆ b         ┆ 3.0    ┆ 6      │
#> │ 2.0   ┆ 3.0     ┆ b         ┆ 4.0    ┆ 7      │
#> └───────┴─────────┴───────────┴────────┴────────┘

df |> complete(group, item_id, item_name)
#> shape: (12, 5)
#> ┌───────┬─────────┬───────────┬────────┬────────┐
#> │ group ┆ item_id ┆ item_name ┆ value1 ┆ value2 │
#> │ ---   ┆ ---     ┆ ---       ┆ ---    ┆ ---    │
#> │ f64   ┆ f64     ┆ str       ┆ f64    ┆ i32    │
#> ╞═══════╪═════════╪═══════════╪════════╪════════╡
#> │ 1.0   ┆ 1.0     ┆ a         ┆ 1.0    ┆ 4      │
#> │ 1.0   ┆ 1.0     ┆ b         ┆ null   ┆ null   │
#> │ 1.0   ┆ 2.0     ┆ a         ┆ null   ┆ null   │
#> │ 1.0   ┆ 2.0     ┆ b         ┆ 3.0    ┆ 6      │
#> │ 1.0   ┆ 3.0     ┆ a         ┆ null   ┆ null   │
#> │ …     ┆ …       ┆ …         ┆ …      ┆ …      │
#> │ 2.0   ┆ 1.0     ┆ b         ┆ null   ┆ null   │
#> │ 2.0   ┆ 2.0     ┆ a         ┆ null   ┆ 5      │
#> │ 2.0   ┆ 2.0     ┆ b         ┆ null   ┆ null   │
#> │ 2.0   ┆ 3.0     ┆ a         ┆ null   ┆ null   │
#> │ 2.0   ┆ 3.0     ┆ b         ┆ 4.0    ┆ 7      │
#> └───────┴─────────┴───────────┴────────┴────────┘

df |>
  complete(
    group, item_id, item_name,
    fill = list(value1 = 0, value2 = 99)
  )
#> shape: (12, 5)
#> ┌───────┬─────────┬───────────┬────────┬────────┐
#> │ group ┆ item_id ┆ item_name ┆ value1 ┆ value2 │
#> │ ---   ┆ ---     ┆ ---       ┆ ---    ┆ ---    │
#> │ f64   ┆ f64     ┆ str       ┆ f64    ┆ f64    │
#> ╞═══════╪═════════╪═══════════╪════════╪════════╡
#> │ 1.0   ┆ 1.0     ┆ a         ┆ 1.0    ┆ 4.0    │
#> │ 1.0   ┆ 1.0     ┆ b         ┆ 0.0    ┆ 99.0   │
#> │ 1.0   ┆ 2.0     ┆ a         ┆ 0.0    ┆ 99.0   │
#> │ 1.0   ┆ 2.0     ┆ b         ┆ 3.0    ┆ 6.0    │
#> │ 1.0   ┆ 3.0     ┆ a         ┆ 0.0    ┆ 99.0   │
#> │ …     ┆ …       ┆ …         ┆ …      ┆ …      │
#> │ 2.0   ┆ 1.0     ┆ b         ┆ 0.0    ┆ 99.0   │
#> │ 2.0   ┆ 2.0     ┆ a         ┆ 0.0    ┆ 5.0    │
#> │ 2.0   ┆ 2.0     ┆ b         ┆ 0.0    ┆ 99.0   │
#> │ 2.0   ┆ 3.0     ┆ a         ┆ 0.0    ┆ 99.0   │
#> │ 2.0   ┆ 3.0     ┆ b         ┆ 4.0    ┆ 7.0    │
#> └───────┴─────────┴───────────┴────────┴────────┘

df |>
  group_by(group, maintain_order = TRUE) |>
  complete(item_id, item_name)
#> shape: (8, 5)
#> ┌───────┬─────────┬───────────┬────────┬────────┐
#> │ group ┆ item_id ┆ item_name ┆ value1 ┆ value2 │
#> │ ---   ┆ ---     ┆ ---       ┆ ---    ┆ ---    │
#> │ f64   ┆ f64     ┆ str       ┆ f64    ┆ i32    │
#> ╞═══════╪═════════╪═══════════╪════════╪════════╡
#> │ 1.0   ┆ 1.0     ┆ a         ┆ 1.0    ┆ 4      │
#> │ 1.0   ┆ 1.0     ┆ b         ┆ null   ┆ null   │
#> │ 1.0   ┆ 2.0     ┆ a         ┆ null   ┆ null   │
#> │ 1.0   ┆ 2.0     ┆ b         ┆ 3.0    ┆ 6      │
#> │ 2.0   ┆ 2.0     ┆ a         ┆ null   ┆ 5      │
#> │ 2.0   ┆ 2.0     ┆ b         ┆ null   ┆ null   │
#> │ 2.0   ┆ 3.0     ┆ a         ┆ null   ┆ null   │
#> │ 2.0   ┆ 3.0     ┆ b         ┆ 4.0    ┆ 7      │
#> └───────┴─────────┴───────────┴────────┴────────┘
#> Groups [2]: group
#> Maintain order: TRUE