Cách kết hợp các đối tượng sfc từ gói sf R


12

Sử dụng gói R sf, làm thế nào để kết hợp sfccác đối tượng? Ví dụ, được cung cấp mã sau đây, làm thế nào một người có thể tạo một sfcđối tượng duy nhất sfc12bao gồm hình học từ cả hai sfc1sfc2? ( length(sfc12)nên là 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 = ?

Một số cách tiếp cận không hiệu quả:

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

Câu trả lời:


11

Chỉ cần sử dụng cnhư một vector của nó:

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

Và độ dài là 2:

> length(sfc12)
[1] 2

1
và làm thế nào bạn có thể kết hợp nhiều đối tượng sfc, ví dụ từ danh sách các đối tượng sfc?
Bernd V.

bạn đã giải quyết nó Bernd? Tôi cũng không tìm thấy một cách thuận tiện để làm điều đó.
Marco

@Marco nếu đây là vấn đề của bạn và Bernd thì hãy bắt đầu một câu hỏi mới với một ví dụ có thể lặp lại.
Spainedman

6
@Marco do.call(c, list(sfc1, sfc2))làm việc cho tôi.
johannes

1
Kết hợp danh sách các sfcđối tượng sử dụng Reduce(c, sfcs)hoặcpurrr::reduce(sfcs , c)
Luke1018

3

Rút ra từ câu trả lời của @ TimSalabim , nếu các sfcđối tượng của bạn ở cùng CRS, bạn có thể sử dụng

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.