Skip to content

Decompose struct columns into separate columns for each of their fields

Description

The new columns will be inserted at the location of the struct column.

Usage

<LazyFrame>$unnest(...)

Arguments

\<dynamic-dots\> Name of the struct column(s) that should be unnested.

Value

A polars LazyFrame

Examples

library("polars")

lf <- pl$LazyFrame(
  a = 1:5,
  b = c("one", "two", "three", "four", "five"),
  c = 6:10
)$
  select(
  pl$struct("b"),
  pl$struct(c("a", "c"))$alias("a_and_c")
)
lf$collect()
#> shape: (5, 2)
#> ┌───────────┬───────────┐
#> │ b         ┆ a_and_c   │
#> │ ---       ┆ ---       │
#> │ struct[1] ┆ struct[2] │
#> ╞═══════════╪═══════════╡
#> │ {"one"}   ┆ {1,6}     │
#> │ {"two"}   ┆ {2,7}     │
#> │ {"three"} ┆ {3,8}     │
#> │ {"four"}  ┆ {4,9}     │
#> │ {"five"}  ┆ {5,10}    │
#> └───────────┴───────────┘
lf$unnest("a_and_c")$collect()
#> shape: (5, 3)
#> ┌───────────┬─────┬─────┐
#> │ b         ┆ a   ┆ c   │
#> │ ---       ┆ --- ┆ --- │
#> │ struct[1] ┆ i32 ┆ i32 │
#> ╞═══════════╪═════╪═════╡
#> │ {"one"}   ┆ 1   ┆ 6   │
#> │ {"two"}   ┆ 2   ┆ 7   │
#> │ {"three"} ┆ 3   ┆ 8   │
#> │ {"four"}  ┆ 4   ┆ 9   │
#> │ {"five"}  ┆ 5   ┆ 10  │
#> └───────────┴─────┴─────┘
lf$unnest(pl$col("a_and_c"))$collect()
#> shape: (5, 3)
#> ┌───────────┬─────┬─────┐
#> │ b         ┆ a   ┆ c   │
#> │ ---       ┆ --- ┆ --- │
#> │ struct[1] ┆ i32 ┆ i32 │
#> ╞═══════════╪═════╪═════╡
#> │ {"one"}   ┆ 1   ┆ 6   │
#> │ {"two"}   ┆ 2   ┆ 7   │
#> │ {"three"} ┆ 3   ┆ 8   │
#> │ {"four"}  ┆ 4   ┆ 9   │
#> │ {"five"}  ┆ 5   ┆ 10  │
#> └───────────┴─────┴─────┘