如何循环使用栅格将它们转换为data.frames

问题描述 投票:0回答:2

我有一些栅格,我想转换为数据帧。我可以一个接一个地手动完成它,但它是无效的。当我尝试进行循环(使用带有名称的列表或向量)时,代码不起作用,R错误显示“as.data.frame.default(x [[i]]中的错误,可选= TRUE):不能将类的结构(“RasterLayer”,package =“raster”)强制转换为data.frame“

我试图使用函数assign()来实现它,但它也不起作用。当使用名称向量时,我只能得到R来制作包含向量名称的单个观察的数据帧

当我一个接一个地做,R实际上是我想做的。我的一个栅格的代码就是

 #"a" is the name of the raster
r_1 <- as.data.frame(a, xy=TRUE, na.rm=TRUE, centroids=TRUE)

我已经尝试了几个男性循环,但都失败了。首先,我尝试创建一个向量并使用函数assign()进行循环

# "a" and "b" are the names of my rasters
o2 <- c("a","b") 

for(i in 1:length(o2)){
  nam <- substr(o2[i],1,nchar(o2))
  assign(nam,as.data.frame(o2[i], xy=TRUE, na.rm=TRUE, centroids=TRUE))
} 

但这只会创建一个名为a1的数据帧,其中包含一个观察点“a1”和一个变量。我也尝试过列表

o4 <- list(a,b)
for(i in 1:length(o4)){
 nam <- substr(o4[i],1,nchar(ola4))
r_i <- as.data.frame(o4[i], xy=TRUE, na.rm=TRUE, centroids=TRUE)
}

这次错误说:“as.data.frame.default(x [[i]],optional = TRUE)中的错误:无法将类的结构(”RasterLayer“,package =”raster“)强制转换为数据。帧”

我期望在我的栅格中有一个包含三列和多少行的数据框。列应该是每个单元格的质心的纬度和经度以及包含每个单元格信息的列。我的代码中没有看到任何错误,也许有人可以帮助我。

我自己使用不同的shapefile创建了栅格。我有超过40个具有以下特征的栅格:wdd 8806,高度:10389,原点:-77.6699,4.94778,像素大小:0,001041666,SRC:EPSG:4326 - WGS 84 - 地理。正如我所说,我自己制作了栅格,并且所有栅格都具有相同的特征。

r loops dataframe r-raster
2个回答
0
投票

在提出这样的问题时,请始终包含一些示例数据(通常不包括您的数据)。这里使用三个(相同的)光栅文件

f <- system.file("external/test.grd", package="raster")
ff <- c(f,f,f)

现在使用列表来完成你想要的。

r <- lapply(ff, raster)
x <- lapply(r, function(i) as.data.frame(i, xy=TRUE, na.rm=TRUE))

切勿使用assign


0
投票

您可以使用apply而不是循环:

s=c(raster1,raster2,raster3)
lapply(s, as.data.frame)
© www.soinside.com 2019 - 2024. All rights reserved.