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

seb*_*rno 5 r ggplot2 r-sf

五十斯塔特包提供了一张很棒的美国地图,下面有夏威夷和阿拉斯加的插图。对象五十_状态已经被强化以与 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
Run Code Online (Sandbox Code Playgroud)

请注意,坐标中的这个问题多边形有点相似,但并不完全符合我的需要。

lbu*_*ett 6

这会起作用:您首先使用 转换为点sf数据集st_as_sf,然后从每个状态/片段的点创建多边形。

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"])
Run Code Online (Sandbox Code Playgroud)

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

  • `sfheaders::sf_polygon(x =五十州,polygon_id = "id", linestring_id = "piece", x = "long", y = "lat")`也可以工作。 (2认同)