Get several values by index in a list
Description
This allows to extract several values per list. To extract a single
value by index, use $list$get()
.
Usage
<Expr>$list$gather(index, null_on_oob = FALSE)
Arguments
index
|
An Expr or something coercible to an Expr, that can return several
single indices. Values are 0-indexed (so index 0 would return the first
item of every sublist) and negative values start from the end (index
-1 returns the last item). If the index is out of bounds,
it will return a null . Strings are parsed as column names.
|
null_on_oob
|
If TRUE , return null if an index is out of
bounds. Otherwise, raise an error.
|
Value
Expr
Examples
library("polars")
df = pl$DataFrame(
a = list(c(3, 2, 1), 1, c(1, 2)),
idx = list(0:1, integer(), c(1L, 999L))
)
df$with_columns(
gathered = pl$col("a")$list$gather("idx", null_on_oob = TRUE)
)
#> shape: (3, 3)
#> ┌─────────────────┬───────────┬─────────────┐
#> │ a ┆ idx ┆ gathered │
#> │ --- ┆ --- ┆ --- │
#> │ list[f64] ┆ list[i32] ┆ list[f64] │
#> ╞═════════════════╪═══════════╪═════════════╡
#> │ [3.0, 2.0, 1.0] ┆ [0, 1] ┆ [3.0, 2.0] │
#> │ [1.0] ┆ [] ┆ [] │
#> │ [1.0, 2.0] ┆ [1, 999] ┆ [2.0, null] │
#> └─────────────────┴───────────┴─────────────┘
#> shape: (3, 3)
#> ┌─────────────────┬───────────┬───────────┐
#> │ a ┆ idx ┆ gathered │
#> │ --- ┆ --- ┆ --- │
#> │ list[f64] ┆ list[i32] ┆ list[f64] │
#> ╞═════════════════╪═══════════╪═══════════╡
#> │ [3.0, 2.0, 1.0] ┆ [0, 1] ┆ [1.0] │
#> │ [1.0] ┆ [] ┆ [null] │
#> │ [1.0, 2.0] ┆ [1, 999] ┆ [null] │
#> └─────────────────┴───────────┴───────────┘
# by some column name, must cast to an Int/Uint type to work
df$with_columns(
gathered = pl$col("a")$list$gather(pl$col("a")$cast(pl$List(pl$UInt64)), null_on_oob = TRUE)
)
#> shape: (3, 3)
#> ┌─────────────────┬───────────┬──────────────────┐
#> │ a ┆ idx ┆ gathered │
#> │ --- ┆ --- ┆ --- │
#> │ list[f64] ┆ list[i32] ┆ list[f64] │
#> ╞═════════════════╪═══════════╪══════════════════╡
#> │ [3.0, 2.0, 1.0] ┆ [0, 1] ┆ [null, 1.0, 2.0] │
#> │ [1.0] ┆ [] ┆ [null] │
#> │ [1.0, 2.0] ┆ [1, 999] ┆ [2.0, null] │
#> └─────────────────┴───────────┴──────────────────┘