我无法分析从AppEEARS下载的MODIS NDVI数据(Terra和Aqua)。
一段时间内数据处于一定程度,所以我将不同的层堆叠在一个文件中。
library(raster)
setwd("~/NDVI/")
NDVI <- list.files(full.names = TRUE, pattern = ".tif$")
sNDVI <- stack(NDVI)
这里没有问题,但是当我查看每层的观察数时,它们在各层之间是不同的。这使得在层之间进行进一步的分析非常困难。
layers <- 0; layers <- as.data.frame(layers)
for (i in 1:NDVI@data@nlayers){
layers[i,] <- length(rasterToPoints(subset(NDVI, i)))
}
summary(layers[,1])
Min. 1st Qu. Median Mean 3rd Qu. Max.
3330678 3340078 3342094 3341450 3343584 3345408
length(layers[,1])
[1] 142
我曾经从以前的系统下载NDVI层而没有问题。有谁知道我在做什么错,或者我该如何解决? 裁剪无效。
谢谢您的帮助!
该问题是由数据中的NA引起的。我学会了here如何可视化NA:
NDVI <- reclassify(NDVI, cbind(NA, 1000)) #or some value way higher than the rest of your data
plot(subset(NDVI, 1)
这表明NA分布在我的整个范围内(我不知道为什么,因为我下载的先前数据不是这种情况)。 我需要以某种方式填充NA,然后尝试使用该列中下一个非NA值的值来填充它们的方法并非最优:
library(zoo)
head(NDVI@data@values)
NDVI@data@values <- na.locf(NDVI@data@values, fromLast = T) # 'fromLast = T' makes the function take the value of the *next* rather than the *previous* value to fill in the NA.
由于NA不足我总数据的0.1%,因此这不会影响我要计算的每层平均值。
这可能不是您要处理栅格的方式,但是我认为我仍然可以编辑原始问题。 干杯,
答案 0 :(得分:0)
这是评估多元栅格阵列数据的一种较差的方法。 raster::rasterToPoints
函数正在丢弃NA,因此长度有所不同。这不是 n 的区别,而是缺少数据。
数组匹配,否则您将收到raster::stack
错误。我建议对此数据应用通用的平滑和无数据插补程序。这将处理丢失的数据,由于诸如云之类的影响,这种类型的数据可能会出现这种情况。
spatialEco软件包的开发版本具有栅格时间序列数据的功能:smooth.time.series
(NA插补),sg.smooth
(Savitzky-Golay平滑)和raster.kendall
(Kendall的Til与Theil-Sen单调趋势斜率)。