堆叠栅格图层在R中具有不同数量的观测值

时间:2018-08-06 15:22:04

标签: r r-raster

我无法分析从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%,因此这不会影响我要计算的每层平均值。

这可能不是您要处理栅格的方式,但是我认为我仍然可以编辑原始问题。 干杯,

1 个答案:

答案 0 :(得分:0)

这是评估多元栅格阵列数据的一种较差的方法。 raster::rasterToPoints函数正在丢弃NA,因此长度有所不同。这不是 n 的区别,而是缺少数据。

数组匹配,否则您将收到raster::stack错误。我建议对此数据应用通用的平滑和无数据插补程序。这将处理丢失的数据,由于诸如云之类的影响,这种类型的数据可能会出现这种情况。

spatialEco软件包的开发版本具有栅格时间序列数据的功能:smooth.time.series(NA插补),sg.smooth(Savitzky-Golay平滑)和raster.kendall(Kendall的Til与Theil-Sen单调趋势斜率)。