我试图创建一个 map 与县一级的数据在美国几个州.由于我包含了Alaska,所以我不能使用maps::map()函数,而 Select 使用usmap::us_map()函数.其结果是一个df,产生一个可爱的 map .

df<-usmap::us_map('counties')%>%
  filter(abbr %in% c('AK','CO','ID','MT','UT','OR','WA','WY','ND','SD'))%>%
  rename(state=abbr)
usmap::plot_usmap(regions='counties', include=c('AK','CO','ID','MT','UT','OR','WA','WY','ND','SD'))

enter image description here

然而,usmap包中存在的绘图选项并不完全是我所需要的.我想将其转换为SF对象.我使用了下面的代码,

MtWc <- lapply(split(df, list(df$county,df$piece),drop=T), function(x) st_polygon(list(cbind(x$x, x$y))))
MtW  <- st_sfc(MtWc, crs = usmap_crs()@projargs)
MtW  <- st_sf(data.frame(fips = unique(d$fips), county = names(MtWc), geometry = MtW))

尽管它只适用于某些州(例如科罗拉多州),但它并不适用于所有州,并导致以下错误:

MtrxSet中出错(x,dim,type="Polygon",NeedClosed=True): 未(全部)闭合的多边形

我try 了各种方法来避免这种情况,包括

df<-cleangeo::clgeo_Clean(df)

基本上,有没有人知道a)如何获取包含所列区域的县级多边形的SF对象,或者b)如何关闭这些多边形以使其工作?

仅供参考,我 Select 按县和块分开,因 for each 县都有多个部分,通常是岛屿.

推荐答案

您可以按州、县和piece拆分数据框,然后 for each 创建一个sf并将它们绑定在一起:

library(sf)

df <- usmap::us_map('counties') %>%
  rename(state = abbr) %>%
  filter(state %in% c('AK','CO','ID','MT','UT','OR','WA','WY','ND','SD'))

dat <- do.call('rbind', split(df, paste(df$state, df$county, df$piece)) |>
  lapply(function(x) st_sf(county = x$county[1], state = x$state[1],
                           st_sfc(st_polygon(list(cbind(x$x, x$y)))), 
                           crs = usmap::usmap_crs())))

现在dat是一个sf数据帧:

library(ggplot2)

ggplot(dat) + geom_sf(fill = 'white')

enter image description here

R相关问答推荐

R Markdown中的交叉引用表

二维样条,严格以一个参数递增

条形图和在Ploly中悬停的问题

在df中保留原始变量和新变量

在R中使用Scale_y_Break后更改y轴标签

打印XTS对象

在使用tidyModels和XGBoost的二进制分类机器学习任务中,所有模型都失败

绘制采样开始和采样结束之间的事件

从数据创建数字的命名列表.R中的框

为什么这个表格格罗布不打印?

在R中,如何从一系列具有索引名的变量快速创建数据帧?

创建新列,其中S列的值取决于该行S值是否与其他行冗余

基于R中的辅助向量中的值有条件地连接向量中的字符串

随机将数据帧中特定列上的某些行设置为NA

从两个数据帧中,有没有办法计算R中一列的唯一值?

根据向量对列表元素进行排序

如何准确地指出Read_delim所面临的问题?

如何在分组蜂群小区中正确定位标签

R:部分修改矩阵对角线的有效方法

臭虫?GradeThis::grade_this_code()在`-code-check`块中失败