r - 将列表中的所有 SpatialPolygonsDataFrame 对象聚合到一个 SpatialPolygonsDataFrame

标签 r rbind sp spdf

不打算编辑拓扑,只是将所有多边形聚合到一个类型为 SpatialPolygonsDataFrame (spdf) 的 sp 对象中。每个 spdf 只有一个多边形。

数据(dropbox link to data)(文件大小 1.1KB)(dput() 在这种情况下不合适):<​​/p>

list_of_spdf <- unlist(readRDS("data.Rds"))

我得到了想要的结果:

one_spdf <- rbind(list_of_spdf[1][[1]], list_of_spdf[2][[1]], list_of_spdf[3][[1]], makeUniqueIDs = TRUE)

# when plotting can see two polygons (third object is a repeat for sake of testing)
plot(one_spdf)

有数百个对象(虽然每个 spdf 只有一个多边形),我需要以编程方式执行 rbind。所以我尝试了 lapply

list_of_spdf <- lapply(list_of_spdf, rbind, makeUniqueIDs = TRUE)

显然,这会返回一个列表,因此不是我要查找的内容。

所以我写了一个函数:

rbindSPDF <- function(lst) {
# Create empty spdf objects  
pol <-
    SpatialPolygonsDataFrame(SpatialPolygons(list()), data = data.frame())
  pols <-
    SpatialPolygonsDataFrame(SpatialPolygons(list()), data = data.frame())
# loop for rbind
  for (i in 1:length(lst)) {
    pol[i] <- lst[i][[1]]
    if (length(pols) == 0) {
      pols <- pol[i]
    } else {
      pols <- rbind(pols, pol[i], makeUniqueIDs = TRUE)
    }
  }
  return(pols)
}

但是,当使用 rbindSPDF 时:

single_spdf <- rbindSPDF(list_of_spdf)

我得到:

Error in as.vector(data) : 
 no method for coercing this S4 class to a vector

不确定我在这里做错了什么。

另外,我猜我可能甚至不需要使用我自己的函数。

注意:除了许多其他包之外,我还使用 sprgdal 来处理空间数据,由于附加/分离时间的原因,我宁愿避免使用另一个包和掩蔽。

最佳答案

有一个程序化的版本

one_spdf <- rbind(list_of_spdf[1][[1]], 
                  list_of_spdf[2][[1]], 
                  list_of_spdf[3][[1]], 
                  ...
                  makeUniqueIDs = TRUE)

对于 list_of_spdf 中的一个很长的列表,是否可以像下面这样工作?

# generate list containing list_of_spdf[i][[1]]
list.df <- lapply(seq_along(list_of_spdf),
                  function(i){list_of_spdf[i][[1]]})

# apply rbind to the list
one_spdf2 <- do.call("rbind",
                     c(args = list.df, makeUniqueIDs = TRUE))

> all.equal(one_spdf, one_spdf2)
[1] TRUE

结果在我的机器上看起来是一样的。

关于r - 将列表中的所有 SpatialPolygonsDataFrame 对象聚合到一个 SpatialPolygonsDataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50187747/

相关文章:

r - r gis : identify inner borders between polygons with sf

r - 寓言预测数据集请求和功能

rbind 具有不同列名的数据框

r - 如何将数据框中的每一列拆分为两列?

r - 将多个 .csv 文件合并为一个

r - SpatialPolygonsDataFrame R中每个多边形的边界框

r - 不删除 NA 的子集函数

r - 从R中的目录列表创建文件列表

r - 使用 'dendextend' 在树状图中围绕指定标签绘制矩形