如何在R中提取sf形状的一部分?

watbbzwu  于 2023-05-20  发布在  其他
关注(0)|答案(2)|浏览(121)

假设我有美国的sf类型的形状数据。

usa <- giscoR::gisco_get_countries(country="USA")
# nrow(usa) is 1

现在giscoR包提供的usa数据包括阿拉斯加和一些太平洋岛屿。有没有办法从整个形状中提取连续的USA作为较小的sf数据?或者我可以在ggplot + geom_sf框架内绘制连续的USA吗?

azpvetkf

azpvetkf1#

您可以使用sf::st_crop将坐标修剪为您选择的任何坐标,然后按您喜欢的方式绘制。下面是使用ggplot的完整reprex:

giscoR::gisco_get_countries(country = "USA") |>
  sf::st_crop(c(xmin = -125, xmax = -60, ymin = 20, ymax = 60)) |>
  ggplot2::ggplot() + 
  ggplot2::geom_sf()
#> Warning: attribute variables are assumed to be spatially constant throughout all
#> geometries

创建于2023-05-18带有reprex v2.0.2

e5nszbig

e5nszbig2#

您描述的输出-国家级别的单行数据-是 * 国家 * 的预期行为(即。国家级数据。阿拉斯加和太平洋岛屿(我想是夏威夷)都是美国的一部分。
要单独获得较低的48个,您可能希望从次国家行政单位开始,例如美国各州,并根据需要过滤它们。{tigris}包是一个很好的地方。
所以考虑这段代码:

library(tidyverse)
library(tigris)
library(sf)

states <- states(cb = FALSE, resolution = '20m') %>%
  filter(!STUSPS %in% c('HI', 'AK', 'PR', 'GU', 'VI', 'AS', 'MP')) %>% 
  select(NAME, STUSPS) 

ggplot(data = states) +
  geom_sf() +
  geom_sf_label(aes(label = STUSPS)) +
  theme_void()

准备好48个状态对象后,可以通过dplyr::summarise()调用将其合并为单个多多边形几何体。

lower_48 <- states %>% 
  summarise()

ggplot(data = lower_48) +
  geom_sf()

相关问题