我有一个包含 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)
您可以使用
terra
包来实现此目的
library(terra)
#stack rasters
Stack <- rast(files)
#Calculate mean of all the rasters using terra
global(Stack, "mean", na.rm=TRUE)
不清楚哪个意味着你想要的。您想要 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
回复旧帖子,以防它对某人有帮助 - 切换到 terra() 是可行的方法,但如果您需要计算 RasterStack 对象中每个栅格图层的平均值并返回一组值(而不是另一个栅格对象) )你可以使用:
meanx <- cellStats(x,'mean')