R - 来自SpatialPoints列表的SpatialPointsDataFrame

时间:2018-01-13 11:29:13

标签: r spatial lapply

如何从SpatialPoints列表中创建SpatialPointsDataFrame?

下面是一个包含SpatialPoints的列表代码:

SP1 <- SpatialPoints(cbind(1,5))
SP2 <- SpatialPoints(cbind(2,4))
SP3 <- SpatialPoints(cbind(3,3))

SP.l<-list(SP1,SP2, SP3)

我正在寻找的是一种从列表中提取SpatialPoints并从中创建SpatialPointsDataFrame的方法。

使用以下代码,我可以从列表中获取单个SpatialPoints:

coords_3 = SP.l[[3]]@coords
data_3 = as.data.frame(SP.l[[3]])

SPDF_3 <- SpatialPointsDataFrame(coords=coords_3, data=as.data.frame(data_3))

但是,我想一次收到所有。 也许是这样的:

SP <- SpatialPoints(lapply(1:length(lidR.clip.SP.l), function(i) {

...

修改 缺少的是:

SP.l <- do.call("rbind", SP.l)

这就是我真正想要的。

THX!

2 个答案:

答案 0 :(得分:2)

由于hrbrmstr没有最小的工作示例。你需要提供一个。现在,我使用GISTools包中的示例数据并演示一种方法。包中有一个数据集调用newhaven。 breach是数据。我复制了它并创建了foo,该类为SpatialPoints。我使用foo创建了两个列表元素。

使用您的代码,我遍历每个列表元素并将SpatialPoints转换为SpatialPointsDataFrame。我希望你能弄明白如何将以下代码应用到你的案例中。

library(GISTools)

data(newhaven)  
foo <- breach

mylist <- list(foo1 = breach[1:10, ],
               foo2 = breach[11:20, ])

lapply(1:length(mylist), function(x){
    SpatialPointsDataFrame(coords = mylist[[x]]@coords,
                           data = as.data.frame(mylist[[x]]))
})

如果要绑定所有SPDF,则可以尝试以下操作。

do.call(rbind, lapply(1:length(mylist), function(x){
                   SpatialPointsDataFrame(coords = mylist[[x]]@coords,
                                          data = as.data.frame(mylist[[x]]))
          })
)

答案 1 :(得分:0)

缺少的是:

SP.l <- do.call("rbind", SP.l)

这就是我真正想要的。

THX!