数据嵌套时如何通过 FIPS 或状态过滤 GeoJSON 数据
How to Filter GeoJSON Data by FIPS or State when Data is Nested
我正在尝试过滤美国由 FIPS 或州设置的县级形状数据。可以找到原始数据集here。但是,我使用的是经过 plotly 清理的版本。
我可以使用以下代码将数据读入 R。
url <- 'https://raw.githubusercontent.com/plotly/datasets/master/geojson-counties-fips.json'
county_data <- geojsonio::geojson_read(url)
我有一个 FIPS 列表 fips <- c(20129, 19139, 17167, 19057, 17141)
,我还可以生成一个 FIPS 起源于 states <- c('IL', 'IA', 'IN')
的州的列表。
通过执行以下操作,我已经能够识别必要边界的索引。
necessary_values = c()
for (i in 1:3221) {
if(county_data$features[[i]]$id %in% fips) {
necessary_values <- c(necessary_values, i)
}
}
但是,我在设置 county_data
时遇到问题,因为 geojson 的结构使得它生成长度为 2 的列表,其中包含属性 type
和 features
。 type
只是 chr
而 features
是一个长度为 3,221 的列表,其中每个元素都有几何数据以及一个 id
属性,即 FIPS 值。
我已经考虑过提出的解决方案 ,但由于 geojson 的结构,它们无济于事。
我应该使用不同的方法吗?还是我在正确的道路上?
如果您愿意使用包 sf 和 tidyverse 风格的代码,这里有一个建议。
此代码将 geojson 读入一个简单的要素集合,然后展示如何过滤州编号“04”(看起来像亚利桑那州)中的所有县并绘制它们。
如果你不想绘制它们,当然,只需删除这些行:)
library(magrittr)
library(dplyr)
library(sf)
library(ggplot2)
url <- 'https://raw.githubusercontent.com/plotly/datasets/master/geojson-counties-fips.json'
county_data <- sf::read_sf(url)
county_data %>%
filter(STATE == "04") %>%
ggplot() +
geom_sf()
如果您想针对特定的县 ID 进行过滤,那么您就走对了。此代码设置 fips 向量,然后过滤原始数据以创建仅包含这些 fips 的新 sf 对象。 (然后再次绘制它们,以备不时之需。)
fips <- c(20129, 19139, 17167, 19057, 17141)
county_data_subset <- county_data %>%
filter(id %in% fips)
county_data_subset %>%
ggplot() +
geom_sf()
如果您正在寻找其他东西,请告诉我。
我正在尝试过滤美国由 FIPS 或州设置的县级形状数据。可以找到原始数据集here。但是,我使用的是经过 plotly 清理的版本。
我可以使用以下代码将数据读入 R。
url <- 'https://raw.githubusercontent.com/plotly/datasets/master/geojson-counties-fips.json'
county_data <- geojsonio::geojson_read(url)
我有一个 FIPS 列表 fips <- c(20129, 19139, 17167, 19057, 17141)
,我还可以生成一个 FIPS 起源于 states <- c('IL', 'IA', 'IN')
的州的列表。
通过执行以下操作,我已经能够识别必要边界的索引。
necessary_values = c()
for (i in 1:3221) {
if(county_data$features[[i]]$id %in% fips) {
necessary_values <- c(necessary_values, i)
}
}
但是,我在设置 county_data
时遇到问题,因为 geojson 的结构使得它生成长度为 2 的列表,其中包含属性 type
和 features
。 type
只是 chr
而 features
是一个长度为 3,221 的列表,其中每个元素都有几何数据以及一个 id
属性,即 FIPS 值。
我已经考虑过提出的解决方案
我应该使用不同的方法吗?还是我在正确的道路上?
如果您愿意使用包 sf 和 tidyverse 风格的代码,这里有一个建议。
此代码将 geojson 读入一个简单的要素集合,然后展示如何过滤州编号“04”(看起来像亚利桑那州)中的所有县并绘制它们。
如果你不想绘制它们,当然,只需删除这些行:)
library(magrittr)
library(dplyr)
library(sf)
library(ggplot2)
url <- 'https://raw.githubusercontent.com/plotly/datasets/master/geojson-counties-fips.json'
county_data <- sf::read_sf(url)
county_data %>%
filter(STATE == "04") %>%
ggplot() +
geom_sf()
如果您想针对特定的县 ID 进行过滤,那么您就走对了。此代码设置 fips 向量,然后过滤原始数据以创建仅包含这些 fips 的新 sf 对象。 (然后再次绘制它们,以备不时之需。)
fips <- c(20129, 19139, 17167, 19057, 17141)
county_data_subset <- county_data %>%
filter(id %in% fips)
county_data_subset %>%
ggplot() +
geom_sf()
如果您正在寻找其他东西,请告诉我。