Complete a data frame with missing combinations of data
Source:R/complete.R
complete.RPolarsDataFrame.Rd
Turns implicit missing values into explicit missing values. This is useful for completing missing combinations of data.
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