Як поєднувати об'єкти sfc з пакету R sf


12

Використовуючи пакет R sf, як об’єднуються sfcоб'єкти? Наприклад, з урахуванням наступного коду, як би створити єдиний sfcоб’єкт, sfc12що включає геометрії обох sfc1та sfc2? ( length(sfc12)має бути 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 = ?

Деякі підходи, які не працюють:

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

Відповіді:


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-об'єктів?
Бернд В.

ти вирішив це Бернд? Я також не знаходжу зручного способу це зробити.
Марко

@Marco, якщо це проблема для вас і Бернда, тоді почніть нове запитання з відтворюваного прикладу.
Спайдермен

6
@Marco do.call(c, list(sfc1, sfc2))працював на мене.
johannes

1
З’єднайте список sfcоб’єктів, використовуючи Reduce(c, sfcs)абоpurrr::reduce(sfcs , c)
Лука1018

3

Виходячи з @ TimSalabim в відповідь , якщо ваші sfcоб'єкти знаходяться в одних і тих же СВК , ви можете використовувати

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.