大栅格图层的摘要和直方图

时间:2018-10-16 08:23:44

标签: r histogram na summary

我是R语言的初学者,并且对包含高程模型的大型栅格图层(Barrow_DEM.tif,2,5GB)有一些疑问。另外,还有一个包含10个多边形的形状文件(Barrow_DTLB.shp),我想从中获取栅格的高程数据。这两个文件具有相同的空间扩展以及正确的坐标,投影等。

`setwd("...")
Barrow_DEM <- raster("Barrow_DEM.tif")
Barrow_DTLB <- st_read("Barrow_DTLB.shp")
Barrow_DTLB_Buffer <- st_read("Barrow_DTLB_BufferOUT.shp")
Barrow_lake <- crop(Barrow_DEM, extent(Barrow_DTLB))
raster_lake <- rasterize(Barrow_DTLB, Barrow_lake, mask = TRUE)
summary(raster_lake)`

结果如下:

summary(raster_lake)
        layer
Min.        0
1st Qu.     2
Median      3
3rd Qu.     8
Max.       12
NA's        0
Warning message:
In .local(object, ...) :
  summary is an estimate based on a sample of 1e+05 cells (0.02% of all cells)

直方图的结果如下:

hist(raster_lake, col=rgb(0,0,1,0.5),  breaks=100, ylab= "Frequency", xlab= "Height", main= "Histogram DTLB Barrow")
Warning message: In .hist1(x, maxpixels = maxpixels, main = main, plot = plot, ...) :
  0% of the raster cells were used (of which 92% were NA). 7651 values used

我已经在这里的另一个讨论中尝试过此方法,但是它没有帮助我。    replaceNA <- function(x, na.rm, ...){ if(is.na(x[1])) return(0) else return(x) } raster_lake <- calc(raster_lake, fun = replaceNA)

似乎新的raster_lake文件中位于多边形外部的所有数据值都获得了NA值。如何摆脱这些NA? 我想获取所有直方图的完整直方图以及一些统计数据,例如中值,均值,最小值,最大值以及分别为每个多边形。

3 个答案:

答案 0 :(得分:0)

如果我很好理解,您希望在删除NA的同时计算栅格值的直方图。

您可以提取栅格值,删除NA并制作值的直方图:

require(raster)
require(sp)
require(gstat)

# load some data and make a raster object
data(meuse.grid)
meuse.grid <- data.frame(x =meuse.grid$y , y =meuse.grid$x , val = meuse.grid$dist)
coordinates(meuse.grid) <- ~x+y
gridded(meuse.grid) <- T
meuse.grid <- raster(meuse.grid)

# get the values from the raster, remove the NA's and make an histogram
hist(na.omit(getValues(meuse.grid)))

编辑

如果您的数据集很大并且需要太多的RAM(R中常见),则可以创建一个ff对象向量,将数据存储在磁盘上:

require(ff)

# create a ff object from the vector or the raster values (NA's are included)
val.Ras <- ff(getValues(meuse.grid))

# you can use this ff object as any other R vector files
hist(val.Ras[,3])

# check that it takes less memory
object.size(val.Ras)
64944 bytes

object.size(getValues(meuse.grid))
3168 bytes

对象尺寸减小了95%!

答案 1 :(得分:0)

ff选项将不起作用,因为首先执行了getValues()或values()。您仍然会用完内存。我认为您唯一的选择是将大型栅格划分为图块,使用预定义的中断计算每个图块的直方图,然后合并图块直方图。或者获得一台具有更多RAM的计算机!

答案 2 :(得分:0)

您可以尝试:

<c:forEach 
    <c:forEach items="${options}" var="option">
    <form:input path="option.mcq"/>                              
</c:forEach>