R: aggregate an 'sf' object

aggregate.sf {sf} | R Documentation

## aggregate an `sf` object

### Description

aggregate an `sf` object, possibly union-ing geometries

### Usage

    ## S3 method for class 'sf'
    aggregate(
      x,
      by,
      FUN,
      ...,
      do_union = TRUE,
      simplify = TRUE,
      join = st_intersects
    )

### Arguments

`x` | object of class sf
`by` | either a list of grouping vectors with length equal to `nrow(x)` (see aggregate), or an object of class `sf` or `sfc` with geometries that are used to generate groupings, using the binary predicate specified by the argument `join`
`FUN` | function passed on to aggregate, in case `ids` was specified and attributes need to be grouped
`...` | arguments passed on to `FUN`
`do_union` | logical; should grouped geometries be unioned using st_union? See details.
`simplify` | logical; see aggregate
`join` | logical spatial predicate function to use if `by` is a simple features object or geometry; see st_join

### Details

In case `do_union` is `FALSE`, `aggregate` will simply combine geometries using c.sfg. When polygons sharing a boundary are combined, this leads to geometries that are invalid; see https://github.com/r-spatial/sf/issues/681.

### Value

an `sf` object with aggregated attributes and geometries; additional grouping variables having the names of `names(ids)` or are named `Group.i` for `ids[[i]]`; see aggregate.

### Note

Does not work using the formula notation involving `~` defined in aggregate.

### Examples

    m1 = cbind(c(0, 0, 1, 0), c(0, 1, 1, 0))
    m2 = cbind(c(0, 1, 1, 0), c(0, 0, 1, 0))
    pol = st_sfc(st_polygon(list(m1)), st_polygon(list(m2)))
    set.seed(1985)
    d = data.frame(matrix(runif(15), ncol = 3))
    p = st_as_sf(x = d, coords = 1:2)
    plot(pol)
    plot(p, add = TRUE)
    (p_ag1 = aggregate(p, pol, mean))
    plot(p_ag1) # geometry same as pol
    # works when x overlaps multiple objects in 'by':
    p_buff = st_buffer(p, 0.2)
    plot(p_buff, add = TRUE)
    (p_ag2 = aggregate(p_buff, pol, mean)) # increased mean of second
    # with non-matching features
    m3 = cbind(c(0, 0, -0.1, 0), c(0, 0.1, 0.1, 0))
    pol = st_sfc(st_polygon(list(m3)), st_polygon(list(m1)), st_polygon(list(m2)))
    (p_ag3 = aggregate(p, pol, mean))
    plot(p_ag3)
    # In case we need to pass an argument to the join function:
    (p_ag4 = aggregate(p, pol, mean,
         join = function(x, y) st_is_within_distance(x, y, dist = 0.3)))

[Package sf version 1.0-7 Index]