R: spatial join, spatial filter

st_join {sf} | R Documentation

## spatial join, spatial filter

### Description

spatial join, spatial filter

### Usage

    st_join(x, y, join, ...)

    ## S3 method for class 'sf'
    st_join(
      x,
      y,
      join = st_intersects,
      ...,
      suffix = c(".x", ".y"),
      left = TRUE,
      largest = FALSE
    )

    st_filter(x, y, ...)

    ## S3 method for class 'sf'
    st_filter(x, y, ..., .predicate = st_intersects)

### Arguments

`x` | object of class `sf`
`y` | object of class `sf`
`join` | geometry predicate function with the same profile as st_intersects; see details
`...` | for `st_join`: arguments passed on to the `join` function or to `st_intersection` when `largest` is `TRUE`; for `st_filter` arguments passed on to the `.predicate` function, e.g. `prepared`, or a pattern for st_relate
`suffix` | length 2 character vector; see merge
`left` | logical; if `TRUE` return the left join, otherwise an inner join; see details. see also left_join
`largest` | logical; if `TRUE`, return `x` features augmented with the fields of `y` that have the largest overlap with each of the features of `x`; see https://github.com/r-spatial/sf/issues/578
`.predicate` | geometry predicate function with the same profile as st_intersects; see details

### Details

alternative values for argument `join` are:

- st_contains_properly

- st_contains

- st_covered_by

- st_covers

- st_crosses

- st_disjoint

- st_equals_exact

- st_equals

- st_is_within_distance

- st_nearest_feature

- st_overlaps

- st_touches

- st_within

- any user-defined function of the same profile as the above

A left join returns all records of the `x` object with `y` fields for non-matched records filled with `NA` values; an inner join returns only records that spatially match.

### Value

an object of class `sf`, joined based on geometry

### Examples

    a = st_sf(a = 1:3,
     geom = st_sfc(st_point(c(1,1)), st_point(c(2,2)), st_point(c(3,3))))
    b = st_sf(a = 11:14,
     geom = st_sfc(st_point(c(10,10)), st_point(c(2,2)), st_point(c(2,2)), st_point(c(3,3))))
    st_join(a, b)
    st_join(a, b, left = FALSE)
    # two ways to aggregate y's attribute values outcome over x's geometries:
    st_join(a, b) %>% aggregate(list(.$a.x), mean)
    library(dplyr)
    st_join(a, b) %>% group_by(a.x) %>% summarise(mean(a.y))
    # example of largest = TRUE:
    nc <- st_transform(st_read(system.file("shape/nc.shp", package="sf")), 2264)
    gr = st_sf(
        label = apply(expand.grid(1:10, LETTERS[10:1])[,2:1], 1, paste0, collapse = " "),
        geom = st_make_grid(st_as_sfc(st_bbox(nc))))
    gr$col = sf.colors(10, categorical = TRUE, alpha = .3)
    # cut, to check, NA's work out:
    gr = gr[-(1:30),]
    nc_j <- st_join(nc, gr, largest = TRUE)
    # the two datasets:
    opar = par(mfrow = c(2,1), mar = rep(0,4))
    plot(st_geometry(nc_j))
    plot(st_geometry(gr), add = TRUE, col = gr$col)
    text(st_coordinates(st_centroid(gr)), labels = gr$label)
    # the joined dataset:
    plot(st_geometry(nc_j), border = 'black', col = nc_j$col)
    text(st_coordinates(st_centroid(nc_j)), labels = nc_j$label, cex = .8)
    plot(st_geometry(gr), border = 'green', add = TRUE)
    par(opar)

[Package sf version 0.9-7 Index]