如何按纬度过滤 sf 对象?

How to filter a sf object by latitude?

数据

我有一个安大略省边界的 shapefile,读作如下:

library(sf)
library(here)
ontario <- sf::st_read(here::here("data", "messy_data", "Ontario.shp"), quiet = TRUE) %>%
  st_transform(4326)

可以画成这样:

问题

我只想为 latitude < 51 保留 ontario 数据。但是因为它是一个 sf 对象,所以 dplyr::filter(latitude < 51) 不起作用。我知道我可以用 st_coordinates() 提取坐标,但我怎样才能将它们连接回数据以过滤掉更高的海拔高度?
或者,sf 中是否有我可以用来进行过滤的函数?我查看了帮助,但到目前为止找不到任何相关内容。

让我们从 GADM 数据中获取加拿大:

library(raster)
library(sf)
cdn = getData("GADM",country="can",level=1)

这应该是安大略省:

ont = cdn[9,]
ont$NAME_1

转换为 sf 对象:

ont = st_as_sf(ont)

开始营业 - 向北 51 度作物:

ont_south = st_crop(ont, xmin=-180, xmax=180, ymin=-90, ymax=51)
plot(ont_south$geometry)