如何从R包SF组合SFC对象


12

使用R包sf,如何组合sfc对象?例如,给定以下代码,将如何创建包含来自和的几何的单个sfc对象?(应为2。)sfc12sfc1sfc2length(sfc12)

library(sf)
pt1 = st_point(c(0,1))
pt2 = st_point(c(1,1))
sfc1 = st_sfc(pt1) # An sfc object
sfc2 = st_sfc(pt2) # Another sfc object
# sfc12 = ?

一些无效的方法:

sf_sfc(sfc1, sfc2) 
# Error in vapply(lst, class, rep("", 3)) : values must be length 3,
# but FUN(X[[1]]) result is length 2

sfc1 + sfc2 # Seems to add the points coordinate-wise.
# Geometry set for 1 feature 
# geometry type:  POINT
# dimension:      XY
# bbox:           xmin: 1 ymin: 2 xmax: 1 ymax: 2
# epsg (SRID):    NA
# proj4string:    NA
# POINT(1 2)

rbind(sfc1, sfc2)
# [,1]     
# sfc1 Numeric,2
# sfc2 Numeric,2

Answers:


11

c就像它的向量一样使用:

> (sfc12 = c(sfc1, sfc2))
Geometry set for 2 features 
geometry type:  POINT
dimension:      XY
bbox:           xmin: 0 ymin: 1 xmax: 1 ymax: 1
epsg (SRID):    NA
proj4string:    NA
POINT(0 1)
POINT(1 1)

长度为2:

> length(sfc12)
[1] 2

1
以及如何合并多个sfc对象(例如,来自sfc对象的列表)?
Bernd V.

你解决了伯恩德吗?我也没有找到方便的方法。
马可(Marco)

@Marco,如果这是您和Bernd遇到的问题,请使用可复制的示例开始一个新问题。
Spacedman

6
@Marco do.call(c, list(sfc1, sfc2))为我工作。
johannes

1
sfc使用Reduce(c, sfcs)purrr::reduce(sfcs , c)
Luke1018 '18

3

从@TimSalabim的答案得出,如果您的sfc对象位于同一CRS中,则可以使用

do.call(rbind, list(sfc1, sfc2))

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.