从 R 中的嵌套列表创建 sfc-column
Create a sfc-column from nested lists in R
所以问题是我有一个列,"location",它是一个列表列表。嵌套列表的长度为 2,并且都在索引 1
处具有纬度值,在索引 2
处具有点的经度值。因为我想从本专栏创建一个 sfc
-对象,所以我考虑将每个嵌套列表转换为一个 sfg
-对象,以便随后将其转换为一个 sfc
-对象。
前三个嵌套列表如下所示:
> geometry[1:3]
[[1]]
[1] 49.45082 11.07702
[[2]]
[1] 49.45006 11.07262
[[3]]
[1] 49.45704 11.08664
所以我有点卡住了,不知道如何从这个嵌套列表创建一个 sfc
-object。
任何提示都会很棒!!
如果您只有一个带坐标的向量列表,您可以使用 purrr::map
或 lapply
遍历每个向量并转换为 sf
点对象的列表,然后将其转换为 sfc
.
library(dplyr)
library(sf)
coords <- list(
c(49.45082, 11.07702),
c(49.45006, 11.07262),
c(49.45704, 11.08664)
)
purrr::map(coords, st_point) %>%
st_as_sfc()
#> Geometry set for 3 features
#> geometry type: POINT
#> dimension: XY
#> bbox: xmin: 49.45006 ymin: 11.07262 xmax: 49.45704 ymax: 11.08664
#> epsg (SRID): NA
#> proj4string: NA
#> POINT (49.45082 11.07702)
#> POINT (49.45006 11.07262)
#> POINT (49.45704 11.08664)
如果您有更常见的几何形式作为数据框列,您可以对该列执行相同的操作:
dat <- tibble(geometry = coords)
dat %>%
mutate(geometry = purrr::map(geometry, st_point) %>%
st_as_sfc())
#> # A tibble: 3 x 1
#> geometry
#> <POINT>
#> 1 (49.45082 11.07702)
#> 2 (49.45006 11.07262)
#> 3 (49.45704 11.08664)
或者将整个东西转换为 sf
数据框:
dat %>%
mutate(geometry = purrr::map(geometry, st_point)) %>%
st_as_sf()
#> Simple feature collection with 3 features and 0 fields
#> geometry type: POINT
#> dimension: XY
#> bbox: xmin: 49.45006 ymin: 11.07262 xmax: 49.45704 ymax: 11.08664
#> epsg (SRID): NA
#> proj4string: NA
#> # A tibble: 3 x 1
#> geometry
#> <POINT>
#> 1 (49.45082 11.07702)
#> 2 (49.45006 11.07262)
#> 3 (49.45704 11.08664)
这些之间的选择取决于您的使用。
所以问题是我有一个列,"location",它是一个列表列表。嵌套列表的长度为 2,并且都在索引 1
处具有纬度值,在索引 2
处具有点的经度值。因为我想从本专栏创建一个 sfc
-对象,所以我考虑将每个嵌套列表转换为一个 sfg
-对象,以便随后将其转换为一个 sfc
-对象。
前三个嵌套列表如下所示:
> geometry[1:3]
[[1]]
[1] 49.45082 11.07702
[[2]]
[1] 49.45006 11.07262
[[3]]
[1] 49.45704 11.08664
所以我有点卡住了,不知道如何从这个嵌套列表创建一个 sfc
-object。
任何提示都会很棒!!
如果您只有一个带坐标的向量列表,您可以使用 purrr::map
或 lapply
遍历每个向量并转换为 sf
点对象的列表,然后将其转换为 sfc
.
library(dplyr)
library(sf)
coords <- list(
c(49.45082, 11.07702),
c(49.45006, 11.07262),
c(49.45704, 11.08664)
)
purrr::map(coords, st_point) %>%
st_as_sfc()
#> Geometry set for 3 features
#> geometry type: POINT
#> dimension: XY
#> bbox: xmin: 49.45006 ymin: 11.07262 xmax: 49.45704 ymax: 11.08664
#> epsg (SRID): NA
#> proj4string: NA
#> POINT (49.45082 11.07702)
#> POINT (49.45006 11.07262)
#> POINT (49.45704 11.08664)
如果您有更常见的几何形式作为数据框列,您可以对该列执行相同的操作:
dat <- tibble(geometry = coords)
dat %>%
mutate(geometry = purrr::map(geometry, st_point) %>%
st_as_sfc())
#> # A tibble: 3 x 1
#> geometry
#> <POINT>
#> 1 (49.45082 11.07702)
#> 2 (49.45006 11.07262)
#> 3 (49.45704 11.08664)
或者将整个东西转换为 sf
数据框:
dat %>%
mutate(geometry = purrr::map(geometry, st_point)) %>%
st_as_sf()
#> Simple feature collection with 3 features and 0 fields
#> geometry type: POINT
#> dimension: XY
#> bbox: xmin: 49.45006 ymin: 11.07262 xmax: 49.45704 ymax: 11.08664
#> epsg (SRID): NA
#> proj4string: NA
#> # A tibble: 3 x 1
#> geometry
#> <POINT>
#> 1 (49.45082 11.07702)
#> 2 (49.45006 11.07262)
#> 3 (49.45704 11.08664)
这些之间的选择取决于您的使用。