R 将sf对象列表转换为一个sf

R 将sf对象列表转换为一个sf,r,list,data.table,rbind,sf,R,List,Data.table,Rbind,Sf,我有一个sf对象列表,我想通过行绑定来创建单个sf对象。我正在寻找一个类似于data.table::rbindlist的函数,它可以高效地堆叠各个对象 可复制示例的数据: df类(df) [1] “sf”“数据帧” 值得注意的是,dplyr::bind_rows和purrr::map_dfr不适用于sf对象,因此在这种情况下,rbind更好。这是一个老问题,但值得注意的是,dplyr(>0.9)的最新版本可以绑定sf对象的行(在列表中或不在列表中): single\u-sf虽然您可以轻松地转换

我有一个
sf
对象列表,我想通过行绑定来创建单个
sf
对象。我正在寻找一个类似于
data.table::rbindlist
的函数,它可以高效地堆叠各个对象

可复制示例的数据:
df类(df)
[1] “sf”“数据帧”

值得注意的是,
dplyr::bind_rows
purrr::map_dfr
不适用于sf对象,因此在这种情况下,
rbind
更好。

这是一个老问题,但值得注意的是,
dplyr
(>0.9)的最新版本可以绑定
sf
对象的行(在列表中或不在列表中):


single\u-sf虽然您可以轻松地转换为sf(如果crs是等效的)
sf::st\u as\u-sf(data.table::rbindlist(my\u list))
为了完整性,@timelyportfolio还编写了
mapedit:::将sf的列表组合起来。它也可能值得监控,因为在某个阶段,sf中可能会实现专用的
bind\u rows\u sf
。还值得注意的是,列表元素的crs需要匹配。。。
my_list <- structure(list(structure(list(idhex = 4L, geometry = structure(list(
            structure(c(664106.970004623, 6524137.38910266), class = c("XY", 
            "POINT", "sfg"))), class = c("sfc_POINT", "sfc"), precision = 0, bbox = structure(c(xmin = 664106.970004623, 
            ymin = 6524137.38910266, xmax = 664106.970004623, ymax = 6524137.38910266
            ), class = "bbox"), crs = structure(list(epsg = 32633L, proj4string = "+proj=utm +zone=33 +datum=WGS84 +units=m +no_defs"), class = "crs"), n_empty = 0L)), row.names = 1L, class = c("sf", 
            "data.frame"), sf_column = "geometry", agr = structure(c(idhex = NA_integer_), .Label = c("constant", 
            "aggregate", "identity"), class = "factor")), structure(list(
            idhex = 9, geometry = structure(list(structure(c(665491.220375992, 
            6525002.7560692), class = c("XY", "POINT", "sfg"))), class = c("sfc_POINT", 
            "sfc"), precision = 0, bbox = structure(c(xmin = 665491.220375992, 
            ymin = 6525002.7560692, xmax = 665491.220375992, ymax = 6525002.7560692
            ), class = "bbox"), crs = structure(list(epsg = 32633L, proj4string = "+proj=utm +zone=33 +datum=WGS84 +units=m +no_defs"), class = "crs"), n_empty = 0L)), row.names = 1L, class = c("sf", 
            "data.frame"), sf_column = "geometry", agr = structure(c(idhex = NA_integer_), .Label = c("constant", 
            "aggregate", "identity"), class = "factor"))), .Dim = 1:2, .Dimnames = list(
            ".", NULL))
single_sf <- rbindlist(my_list)
class(single_sf)
df <- do.call(rbind, my_list)

> class(df)
[1] "sf"         "data.frame"
single_sf <- dplyr::bind_rows(my_list)
class(single_sf)
[1] "sf"         "data.frame"