group-by.SpatVector {tidyterra} | R Documentation |
Group a SpatVector
by one or more variables
Description
Most data operations are done on groups defined by variables.
group_by.SpatVector()
adds new attributes to an existing SpatVector
indicating the corresponding groups. See Methods.
Usage
## S3 method for class 'SpatVector'
group_by(.data, ..., .add = FALSE, .drop = group_by_drop_default(.data))
## S3 method for class 'SpatVector'
ungroup(x, ...)
Arguments
.data , x |
A |
... |
In |
.add |
When This argument was previously called |
.drop |
Drop groups formed by factor levels that don't appear in the
data? The default is |
Details
See Details on dplyr::group_by()
.
Value
A SpatVector
object with an additional attribute.
Methods
Implementation of the generic dplyr::group_by()
family functions for
SpatVector
objects.
When mixing terra and dplyr syntax on a
grouped SpatVector
(i.e, subsetting a SpatVector
like v[1:3,1:2]
) the
groups
attribute can be corrupted. tidyterra would try to
re-group the SpatVector
. This would be triggered the next time you use a
dplyr verb on your SpatVector
.
Note also that some operations (as terra::spatSample()
) would create a new
SpatVector
. In these cases, the result won't preserve the groups
attribute. Use group_by()
to re-group.
See Also
dplyr::group_by()
, dplyr::ungroup()
Other dplyr verbs that operate on group of rows:
count.SpatVector()
,
rowwise.SpatVector()
,
summarise.SpatVector()
Other dplyr methods:
arrange.SpatVector()
,
bind_cols.SpatVector
,
bind_rows.SpatVector
,
count.SpatVector()
,
distinct.SpatVector()
,
filter-joins.SpatVector
,
filter.Spat
,
glimpse.Spat
,
mutate-joins.SpatVector
,
mutate.Spat
,
pull.Spat
,
relocate.Spat
,
rename.Spat
,
rowwise.SpatVector()
,
select.Spat
,
slice.Spat
,
summarise.SpatVector()
Examples
library(terra)
f <- system.file("ex/lux.shp", package = "terra")
p <- vect(f)
by_name1 <- p %>% group_by(NAME_1)
# grouping doesn't change how the SpatVector looks
by_name1
# But add metadata for grouping: See the coercion to tibble
# Not grouped
p_tbl <- as_tibble(p)
class(p_tbl)
head(p_tbl, 3)
# Grouped
by_name1_tbl <- as_tibble(by_name1)
class(by_name1_tbl)
head(by_name1_tbl, 3)
# It changes how it acts with the other dplyr verbs:
by_name1 %>% summarise(
pop = mean(POP),
area = sum(AREA)
)
# Each call to summarise() removes a layer of grouping
by_name2_name1 <- p %>% group_by(NAME_2, NAME_1)
by_name2_name1
group_data(by_name2_name1)
by_name2 <- by_name2_name1 %>% summarise(n = dplyr::n())
by_name2
group_data(by_name2)
# To removing grouping, use ungroup
by_name2 %>%
ungroup() %>%
summarise(n = sum(n))
# By default, group_by() overrides existing grouping
by_name2_name1 %>%
group_by(ID_1, ID_2) %>%
group_vars()
# Use add = TRUE to instead append
by_name2_name1 %>%
group_by(ID_1, ID_2, .add = TRUE) %>%
group_vars()
# You can group by expressions: this is a short-hand
# for a mutate() followed by a group_by()
p %>%
group_by(ID_COMB = ID_1 * 100 / ID_2) %>%
relocate(ID_COMB, .before = 1)