如何从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!
答案 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!