计算 R 中栅格堆栈的平均值

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

我有一个包含 32 个 NPP 文件的栅格堆栈,想要计算平均值。我总是得到 NA 作为答案。(我的 NDVI 文件也是如此)。

这是我的代码:

NPP.all.mean = rep(0, times = 32)
for(i in 1:32){
      NPP.all.mean[i] = mean(NPP_corrected[[i]], na.rm = TRUE)
}
NPP

.mean = mean(ndvi.all.mean)   
    ```
    This is my desired plot with the mean of the mean and the single year values: 
    
    plot(dates$Date, ndvi.all.mean, type = 'l', col = 'darkgreen', lwd = 2, ylim = c(0, 1), xaxt = 'n',
         xlab = 'Datum', ylab = 'NDVI / NPP'')
    axis(side = 1, dates$Date, format(dates$Date, '%m-%Y'))
    abline(v = dates$Date, col = 'gray', lty = 'dotted')
    abline(h = seq(from = 0, to = 1, by = 0.1), col = 'gray', lty = 'dotted')
    lines(dates$Datum, npp.all.mean, col = 'blue', lwd = 2)
    abline(h = ndvi.mean, col = 'green', lwd = 2)
    abline(h = npp.mean, col = 'cyan', lwd = 2)
r mean r-raster
3个回答
2
投票

您可以使用

terra
包来实现此目的

library(terra)

#stack rasters
Stack <- rast(files)

#Calculate mean of all the rasters using terra
global(Stack, "mean", na.rm=TRUE)

2
投票

不清楚哪个意味着你想要的。您想要 global 均值(每层一个值)还是 local 均值(每个单元格一个值)。

使用“terra”和这些示例数据

library(terra)
npp <- rast(system.file("ex/logo.tif", package="terra"))   

全局平均值是这样计算的

global(npp, mean, na.rm=TRUE)
#          mean
#red   182.2855
#green 185.3509
#blue  192.8046

局部平均值的计算如下:

mean(npp, na.rm=TRUE)
#class       : SpatRaster 
#dimensions  : 77, 101, 1  (nrow, ncol, nlyr)
#resolution  : 1, 1  (x, y)
#extent      : 0, 101, 0, 77  (xmin, xmax, ymin, ymax)
#coord. ref. : Cartesian (Meter) 
#source(s)   : memory
#name        : mean 
#min value   :    0 
#max value   :  255 

0
投票

回复旧帖子,以防它对某人有帮助 - 切换到 terra() 是可行的方法,但如果您需要计算 RasterStack 对象中每个栅格图层的平均值并返回一组值(而不是另一个栅格对象) )你可以使用:

 meanx <- cellStats(x,'mean')
© www.soinside.com 2019 - 2024. All rights reserved.