gpt4 book ai didi

r - 将 sf 对象列表转换为一个 sf

转载 作者:行者123 更新时间:2023-12-03 21:09:58 27 4
gpt4 key购买 nike

我有一个 sf 的列表我想行绑定(bind)以创建单个 sf 的对象目的。我正在寻找类似于 data.table::rbindlist 的函数,这将以有效的方式堆叠各个对象。

可重现示例的数据:

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

请注意 data.tablesf库还不完全兼容。所以 rbindlist函数返回一个不被识别为 `sf 对象的对象。
single_sf <- rbindlist(my_list)
class(single_sf)

最佳答案

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

single_sf <- dplyr::bind_rows(my_list)
class(single_sf)
[1] "sf" "data.frame"
其他包也提供了可用于绑定(bind)的选项 sf对象(例如 mapedit:::combine_list_of_sf() , sf:::rbind.sfdata.table::rbindlist ),除了 do.call()上面提到的选项(参见 https://github.com/r-spatial/sf/issues/798# 进行讨论和一些基准测试)。但是 dplyr选项也适用于 sf具有包含不同列数的数据框的对象, do.call() , sf:::rbind.sf() , 和 data.table::rbindlist()做不到,这对我处理 sf 的列表很重要具有不同列数的对象。

关于r - 将 sf 对象列表转换为一个 sf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51312935/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com