将强化的 data.frame 转换回 sf 对象

convert a fortified data.frame back to sf object

fiftystater 包提供了一张很棒的美国地图,下面的插图中有夏威夷和阿拉斯加。对象 fifty_states 已经针对 ggplot2 的使用进行了强化。但是,我想使用 geom_sf.

将其绘制为 sf 对象

作为一个更普遍的问题,将强化 data.frame 转换回 sf 多边形的最佳方法是什么?

library(fiftystater)
fifty_states <– fifty_states

> head(fifty_states)
       long      lat order  hole piece      id     group
1 -85.07007 31.98070     1 FALSE     1 alabama Alabama.1
2 -85.11515 31.90742     2 FALSE     1 alabama Alabama.1
3 -85.13557 31.85488     3 FALSE     1 alabama Alabama.1
4 -85.13156 31.78381     4 FALSE     1 alabama Alabama.1
5 -85.13017 31.77885     5 FALSE     1 alabama Alabama.1
6 -85.11529 31.73157     6 FALSE     1 alabama Alabama.1

注意这个问题 有点相似,但不完全符合我的需要。

这可行:您首先使用 st_as_sf 转换为点 sf 数据集,然后从每个 state/piece 的点创建多边形。

sf_fifty <- sf::st_as_sf(fifty_states, coords = c("long", "lat")) %>% 
  group_by(id, piece) %>% 
  summarize(do_union=FALSE) %>%
  st_cast("POLYGON") %>% 
  ungroup()

plot(sf_fifty["id"])

(另见 https://github.com/r-spatial/sf/issues/321