Comment combiner des objets SFC à partir du package R SF


12

En utilisant le package R sf, comment combiner des sfcobjets? Par exemple, étant donné le code suivant, comment créer un sfcobjet unique sfc12qui comprend les géométries des deux sfc1et sfc2? ( length(sfc12)devrait être 2.)

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 = ?

Quelques approches qui ne fonctionnent pas:

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

Réponses:


11

Utilisez simplement ccomme un vecteur:

> (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)

Et la longueur est de 2:

> length(sfc12)
[1] 2

1
et comment combineriez-vous de nombreux objets SFC, par exemple à partir d'une liste d'objets SFC?
Bernd V.21

l'avez-vous résolu Bernd? Je ne trouve pas non plus de moyen pratique de le faire.
Marco

@Marco si c'est un problème pour vous et Bernd, commencez une nouvelle question avec un exemple reproductible.
Spacedman

6
@Marco a do.call(c, list(sfc1, sfc2))travaillé pour moi.
johannes

1
Combinez une liste d' sfcobjets en utilisant Reduce(c, sfcs)oupurrr::reduce(sfcs , c)
Luke1018

3

S'inspirant de la réponse de @ TimSalabim , si vos sfcobjets sont dans le même CRS, vous pouvez utiliser

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.