pivot_wider()
"widens" a SpatVector
, increasing the number of columns and
decreasing the number of rows. The inverse transformation is
pivot_longer.SpatVector()
.
Usage
# S3 method for class 'SpatVector'
pivot_wider(
data,
...,
id_cols = NULL,
id_expand = FALSE,
names_from = "name",
names_prefix = "",
names_sep = "_",
names_glue = NULL,
names_sort = FALSE,
names_vary = "fastest",
names_expand = FALSE,
names_repair = "check_unique",
values_from = "value",
values_fill = NULL,
values_fn = NULL,
unused_fn = NULL
)
Arguments
- data
A
SpatVector
to pivot.- ...
Additional arguments passed on to methods.
- id_cols
<
tidy-select
> A set of columns that uniquely identify each observation. Typically used when you have redundant variables, i.e. variables whose values are perfectly correlated with existing variables.Defaults to all columns in
data
except for the columns specified throughnames_from
andvalues_from
. If atidyselect
expression is supplied, it will be evaluated ondata
after removing the columns specified throughnames_from
andvalues_from
.Note that "
geometry
" columns is sticky, hence it would be removed fromnames_from
andvalues_from
.- id_expand
Should the values in the
id_cols
columns be expanded byexpand()
before pivoting? This results in more rows, the output will contain a complete expansion of all possible values inid_cols
. Implicit factor levels that aren't represented in the data will become explicit. Additionally, the row values corresponding to the expandedid_cols
will be sorted.- names_from, values_from
<
tidy-select
> A pair of arguments describing which column (or columns) to get the name of the output column (names_from
), and which column (or columns) to get the cell values from (values_from
).If
values_from
contains multiple values, the value will be added to the front of the output column.- names_prefix
A regular expression used to remove matching text from the start of each variable name.
- names_sep
If
names_from
orvalues_from
contains multiple variables, this will be used to join their values together into a single string to use as a column name.- names_glue
Instead of
names_sep
andnames_prefix
, you can supply a glue specification that uses thenames_from
columns (and special.value
) to create custom column names.- names_sort
Should the column names be sorted? If
FALSE
, the default, column names are ordered by first appearance.- names_vary
When
names_from
identifies a column (or columns) with multiple unique values, and multiplevalues_from
columns are provided, in what order should the resulting column names be combined?"fastest"
variesnames_from
values fastest, resulting in a column naming scheme of the form:value1_name1, value1_name2, value2_name1, value2_name2
. This is the default."slowest"
variesnames_from
values slowest, resulting in a column naming scheme of the form:value1_name1, value2_name1, value1_name2, value2_name2
.
- names_expand
Should the values in the
names_from
columns be expanded byexpand()
before pivoting? This results in more columns, the output will contain column names corresponding to a complete expansion of all possible values innames_from
. Implicit factor levels that aren't represented in the data will become explicit. Additionally, the column names will be sorted, identical to whatnames_sort
would produce.- names_repair
What happens if the output has invalid column names? The default,
"check_unique"
is to error if the columns are duplicated. Use"minimal"
to allow duplicates in the output, or"unique"
to de-duplicated by adding numeric suffixes. Seevctrs::vec_as_names()
for more options.- values_fill
Optionally, a (scalar) value that specifies what each
value
should be filled in with when missing.This can be a named list if you want to apply different fill values to different value columns.
- values_fn
Optionally, a function applied to the value in each cell in the output. You will typically use this when the combination of
id_cols
andnames_from
columns does not uniquely identify an observation.This can be a named list if you want to apply different aggregations to different
values_from
columns.- unused_fn
Optionally, a function applied to summarize the values from the unused columns (i.e. columns not identified by
id_cols
,names_from
, orvalues_from
).The default drops all unused columns from the result.
This can be a named list if you want to apply different aggregations to different unused columns.
id_cols
must be supplied forunused_fn
to be useful, since otherwise all unspecified columns will be consideredid_cols
.This is similar to grouping by the
id_cols
then summarizing the unused columns usingunused_fn
.
Methods
Implementation of the generic tidyr::pivot_wider()
function.
See also
Other tidyr verbs for pivoting:
pivot_longer.SpatVector()
Other tidyr methods:
drop_na.Spat
,
fill.SpatVector()
,
pivot_longer.SpatVector()
,
replace_na.Spat
Examples
# \donttest{
library(dplyr)
library(tidyr)
library(ggplot2)
cyl <- terra::vect(system.file("extdata/cyl.gpkg", package = "tidyterra"))
# Add extra row with info
xtra <- cyl %>%
slice(c(2, 3)) %>%
mutate(
label = "extra",
value = TRUE
) %>%
rbind(cyl, .) %>%
glimpse()
#> # A SpatVector 11 x 5
#> # Geometry type: Polygons
#> # Projected CRS: ETRS89-extended / LAEA Europe (EPSG:3035)
#> # CRS projection units: meter <m>
#> # Extent (x / y) : ([2,892,687 / 3,341,372] , [2,017,622 / 2,361,600])
#>
#> $ iso2 <chr> "ES-AV", "ES-BU", "ES-LE", "ES-P", "ES-SA", "ES-SG", "ES-SO", "E…
#> $ cpro <chr> "05", "09", "24", "34", "37", "40", "42", "47", "49", "09", "24"
#> $ name <chr> "Avila", "Burgos", "Leon", "Palencia", "Salamanca", "Segovia", "…
#> $ label <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, "extra", "extra"
#> $ value <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, TRUE, TRUE
# Pivot by geom
xtra %>%
pivot_wider(
id_cols = iso2:name, values_from = value,
names_from = label
)
#> class : SpatVector
#> geometry : polygons
#> dimensions : 9, 5 (geometries, attributes)
#> extent : 2892687, 3341372, 2017622, 2361600 (xmin, xmax, ymin, ymax)
#> coord. ref. : ETRS89-extended / LAEA Europe (EPSG:3035)
#> names : iso2 cpro name NA extra
#> type : <chr> <chr> <chr> <logical> <logical>
#> values : ES-AV 05 Avila <NA> <NA>
#> ES-BU 09 Burgos <NA> TRUE
#> ES-LE 24 Leon <NA> TRUE
# }