我正在使用R在县级绘制美国地图。我从GADM下载了美国的shapefile。县级形状文件是“ gadm36_USA_2.shp”。然后,我使用下面的代码绘制地图:

library(sf)
library(tidyverse)

us2 <- st_read("<Path>\\gadm36_USA_2.shp")

mainland2 <- ggplot(data = us2) +
geom_sf(aes(fill = NAME_2), size = 0.4, color = "black") +
coord_sf(crs = st_crs(2163),
         xlim = c(-2500000, 2500000),
         ylim = c(-2300000, 730000)) + guides(fill = F)

大湖区(用红色箭头显示)被绘制而不是空白:
r - 从R中的美国县级 map 中删除五大湖-LMLPHP
我想要的是下图,大湖区留为空白:
r - 从R中的美国县级 map 中删除五大湖-LMLPHP
如何从“ gadm36_USA_2.shp”中识别出与大湖区相对应的行,以便删除它们?
我了解,除GADM之外,还有其他获取Shapefile的方法。我相信GADM是在全球范围内提供边防的绝佳来源。我希望借此机会更好地了解从GADM下载的数据。
当然,欢迎使用其他方法来获取美国县级边界数据。我注意到USAboundaries软件包还提供了国家,州和县级别的公文,但是我在安装关联的USAboundariesData软件包时遇到了困难。除了GADM的shapefile之外,任何以美国方式吸引美国各州的想法都值得欢迎。谢谢。

最佳答案

一种方法是删除现有记录中所有带有Lake标记的功能(当前为13个功能)。首先,您需要在属性表中找到湖泊名称,如下所示:

# retrieving the name of lakes and excluding them from the sf

all.names = us2$NAME_2
patterns = c("Lake", "lake")

lakes.name <- unique(grep(paste(patterns, collapse="|"), all.names, value=TRUE, ignore.case = TRUE))
#[1] "Lake and Peninsula" "Lake"               "Bear Lake"          "Lake Michigan"      "Lake Hurron"        "Lake St. Clair"
#[7] "Lake Superior"      "Lake of the Woods"  "Red Lake"           "Lake Ontario"       "Lake Erie"          "Salt Lake"
#[13] "Green Lake"

`%notin%` <- Negate(`%in%`)
us <- us2[us2$NAME_2 %notin% lakes.name, ]


然后,您可以映射其余功能:

mainland2 <- ggplot(data = us) +
  geom_sf(aes(fill = NAME_2), size = 0.4, color = "black") +
  coord_sf(crs = st_crs(2163),
           xlim = c(-2500000, 2500000),
           ylim = c(-2300000, 730000)) + guides(fill = F)
mainland2


r - 从R中的美国县级 map 中删除五大湖-LMLPHP

另一种方法(更容易但不太灵活)是通过从Water body中排除ENGTYPE_2值来映射县要素,如下所示:

us <- us2[(us2$ENGTYPE_2) != "Water body",]
mainland2 <- ggplot(data = us) +
  geom_sf(aes(fill = NAME_2), size = 0.4, color = "black") +
  coord_sf(crs = st_crs(2163),
           xlim = c(-2500000, 2500000),
           ylim = c(-2300000, 730000)) + guides(fill = F)
mainland2


r - 从R中的美国县级 map 中删除五大湖-LMLPHP

08-20 01:56