You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中绘制shapefile前对其进行筛选?

解决Shapefile筛选与工作目录设置问题

嘿,我来帮你搞定这个Shapefile筛选和setwd()的用法问题!咱们一步步来:

1. 先设置工作目录(setwd()的正确打开方式)

setwd()的作用是把R的工作目录切换到你存放Shapefile文件的文件夹,这样后面读取文件时就不用写长长的全路径了。

举个实际例子,假设你的Shapefile存在Windows的C:\Users\Dennis\Documents\UK_GIS_Data文件夹里,代码可以这么写:

# Windows系统用正斜杠或者双反斜杠(避免转义问题)
setwd("C:/Users/Dennis/Documents/UK_GIS_Data")

# 跨平台写法(Windows/macOS/Linux都能用)
setwd(file.path("C:", "Users", "Dennis", "Documents", "UK_GIS_Data"))

要是你用macOS,路径可能是/Users/Dennis/Documents/UK_GIS_Data,直接填进去就行。

2. 读取并筛选Shapefile(推荐用现代的sf包)

现在R处理GIS数据首选sf包(比旧的rgdal更易用且维护活跃),咱们用它来完成读取和筛选:

# 先安装sf包(第一次用的话)
install.packages("sf")
library(sf)

# 读取Shapefile(替换成你下载的Shapefile文件名,不用加.shp后缀也可以)
uk_lads <- st_read("Local_Authority_Districts_December_2016_Full_Clipped_Boundaries_in_Great_Britain")

# 按照你的需求筛选:lad16cd包含E0800000 或者 E08000010的区域
filtered_lads <- uk_lads[grepl("E0800000|E08000010", uk_lads$lad16cd), ]

# 要是你习惯用dplyr的管道语法,也可以这么写(更直观)
# install.packages("dplyr")
# library(dplyr)
# filtered_lads <- uk_lads %>% filter(grepl("E0800000|E08000010", lad16cd))

这里grepl()函数用来匹配字符串,|表示“或”的逻辑,刚好对应你下载数据时的WHERE条件。

3. 验证筛选结果并绘图

筛选完可以快速画个图看看结果对不对:

# 绘制筛选后的区域边界
plot(st_geometry(filtered_lads), main="Filtered UK Local Authority Districts")

如果你还在使用旧的rgdal包(不推荐,已退役)

要是你参考的博客用了rgdal,也可以这么操作,但还是建议转用sf:

install.packages("rgdal")
library(rgdal)

# 读取Shapefile,dsn填工作目录(这里是当前目录,所以用"."),layer填文件名(不含.shp)
uk_lads <- readOGR(dsn = ".", layer = "Local_Authority_Districts_December_2016_Full_Clipped_Boundaries_in_Great_Britain")

# 筛选逻辑和之前一样
filtered_lads <- uk_lads[grepl("E0800000|E08000010", uk_lads$lad16cd), ]

# 绘图
plot(filtered_lads)

内容的提问来源于stack exchange,提问作者Dennis Ng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:57:50