7.3 tidyverse

Package sf has tidyverse-style read and write functions, read_sf and write_sf that

  • return a tibble rather than a data.frame
  • do not print any output
  • overwrite existing data by default

The dplyr, ggplot2, and tidyr capabilities are probably familiar for this audience, but there are some extra considerations for sf data below.

7.3.1 summarise

The summarise method for sf objects has two special arguments:

  • do_union (default TRUE) determines whether grouped geometries are unioned on return, so that they form a valid geometry
  • is_coverage (default FALSE) in case the geometries grouped form a coverage (do not have overlaps), setting this to TRUE speeds up the unioning

7.3.2 filter

We can use filter for spatial predicates. For example, to select all counties less than 50 km away from Orange County,

# filters
orange <- nc |> dplyr::filter(NAME == "Orange")
wd <- st_is_within_distance(nc, orange, 
                            units::set_units(50, km))
o50 <- nc |> dplyr::filter(lengths(wd) > 0)

# plot
og <- st_geometry(orange)
buf50 <- st_buffer(og, units::set_units(50, km))
all <- c(buf50, st_geometry(o50))
plot(st_geometry(o50), lwd = 2, extent = all)
plot(og, col = 'orange', add = TRUE)
plot(buf50, add = TRUE, col = NA, border = 'brown')
plot(st_geometry(nc), add = TRUE, border = 'grey')

7.3.3 distinct

The distinct method selects distinct records, where st_equals is used to evaluate distinctness of geometries.