如何通过纬度筛选sf对象?

5

数据

我有一个安大略省边界的 shapefile 文件,读取方式如下:

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

可以绘制成下面这样:

enter image description here

问题

我想仅保留纬度<51ontario数据。但由于它是一个sf对象,dplyr::filter(latitude < 51)无法使用。我知道可以用st_coordinates()提取坐标,但如何将它们与数据连接起来以过滤掉更高的高度呢?
另外,在sf中是否有任何可用于进行筛选的函数?我查看了帮助文档,但目前还没有找到相关的内容。


“keep”是什么意思?创建一个新的形状,将特征裁剪到51N?如果您能使用一些常见数据创建可重现的示例而不使用here,那将会很有帮助。 - Spacedman
1个回答

10

让我们从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)

enter image description here


谢谢。我不知道它是那么简单!这正是我想做的。裁剪的原因是我想使用点数据插值天气,而在北纬51度以上只有1个气象站数据可用。 - umair durrani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接