R语言raster包计算多个栅格图像平均值、标准差的方法

简介: R语言raster包计算多个栅格图像平均值、标准差的方法

  本文介绍基于R语言中的raster包,批量读取多张栅格图像,对多个栅格图像计算平均值标准差,并将所得新的栅格结果图像保存的方法。

  在文章R语言raster包批量读取单一或大量栅格图像https://blog.csdn.net/zhebushibiaoshifu/article/details/128485386)中,我们介绍了基于R语言raster包,对单张或多张栅格图像加以平均值标准差计算的方法;但这一篇文章中的标准差计算方法仅仅可以对一张栅格图像的全部像元加以计算,即标准差计算结果是一个具体的数值,而不是一景结果影像;无法对多张、多时相的栅格图像进行计算。本文就介绍另一种方法,可以对多个时相的大量栅格影像加以逐像元平均值、标准差的计算,从而使得最终的结果是一景表示各个像元在全部时相的图像中的平均值或标准差的图像

  首先,我们按照文章R语言raster包批量读取单一或大量栅格图像https://blog.csdn.net/zhebushibiaoshifu/article/details/128485386)中提到的方法,配置、加载raster包,并通过stack()函数读取同一文件夹下的全部栅格图像,具体代码如下所示。其中,代码的含义我们在上述这一篇文章中已经加以介绍,这里就不再赘述。

library(raster)
tif_file_path <- list.files(r"(E:\02_Project\01_Chlorophyll\LCC_SC_2020\SD)", pattern = ".tif$", full.names = TRUE, ignore.case = TRUE)
tif_file_all <- stack(tif_file_path)

  运行上述代码,可以看到已经得到了RasterStack格式的结果数据,如下图所示。

  接下来,我们通过calc()函数,对多时相栅格遥感影像数据加以计算;其中,其第一个参数tif_file_all就是需要加以计算的多个栅格图像,而第二个参数fun = sd表示我们需要计算标准差;如果我们需要计算平均值,那么就将第二个参数修改为fun = mean即可,我们这里就以标准差为例介绍后续的操作。当然,前述提到的文章R语言raster包批量读取单一或大量栅格图像https://blog.csdn.net/zhebushibiaoshifu/article/details/128485386)中的方法也是可以对多个栅格图像计算平均值的。

tif_sd <- calc(tif_file_all, fun = sd)
plot(tif_sd)

  此外,上述代码在calc()函数运行时,若某一空间位置上的像元多张栅格遥感影像中,存在至少一个无效值(NoData值),则这一像元在最终的结果图像中同样为无效值;若希望忽略无效值的这一影响,可以将上述第一句代码修改为如下格式。其中,na.rm = TRUE就表示若某一景栅格遥感影像中某像元为无效值,则忽略这一景影像中的这一个像元。

tif_sd <- calc(tif_file_all, fun = sd, na.rm = TRUE)

  运行calc()函数后,我们可以通过plot()函数将结果图像绘制出来,如下图所示。

  上图即为多个栅格图像的像元数值时间序列依次计算标准差所得的结果。

  此外,由于我这里的栅格像元数据实际表达的数值之间有一个缩放系数0.01,因此通过下述代码将其像元值恢复为实际含义的数值。

tif_sd_new <- tif_sd / 100
plot(tif_sd_new)

  随后,重新绘制结果图;确认无误后,即可依据writeRaster()函数,通过如下代码保存我们刚刚得到的标准差结果栅格图像。

rf <- writeRaster(tif_sd_new, filename = r"(E:\02_Project\01_Chlorophyll\LCC_SC_2020\SD\LCC_SD.tif)", overwrite = TRUE)

  运行代码后,如下图所示。其中,writeRaster()函数的第一个参数表示我们将要保存的栅格数据,第二个参数表示保存栅格文件的路径与名称,第三个参数表示,如果第二个参数指定的路径与名称已经有文件存在了,是否直接对其加以覆盖。

  随后,我们即可在指定的路径下找到我们刚刚计算得到的多个栅格图像的标准差结果。

欢迎关注:疯狂学习GIS

相关文章
|
3月前
|
存储 数据采集 数据处理
R语言数据变换:使用tidyr包进行高效数据整形的探索
【8月更文挑战第29天】`tidyr`包为R语言的数据整形提供了强大的工具。通过`pivot_longer()`、`pivot_wider()`、`separate()`和`unite()`等函数,我们可以轻松地将数据从一种格式转换为另一种格式,以满足不同的分析需求。掌握这些函数的使用,将大大提高我们处理和分析数据的效率。
|
5天前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
19 3
|
6月前
【R语言实战】——fGARCH包在金融时序上的模拟应用
【R语言实战】——fGARCH包在金融时序上的模拟应用
|
6月前
|
存储 算法 Windows
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例(下)
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例
|
5月前
|
Python
R语言遍历文件夹求取其中所有栅格文件的平均值
通过NAvalue(tif_file_all) <- -10000这句代码,将值为-10000的像元作为NoData值的像元,防止后期计算平均值时对结果加以干扰。   接下来,我们通过file.path()函数配置一下输出结果的路径——其中,结果遥感影像文件的名称就可以直接以其所对应的条带号来设置,并在条带号后添加一个_mean后缀,表明这个是平均值的结果图像;但此外,这个仅仅是文件的名字,还需要将文件名与路径拼接在一起,才可以成为完整的保存路径,因此需要用到file.path()函数。最后,将结果图像通过writeRaster()函数加以保存即可,这句代码的解释大家同样参考R语言求取大量遥感
173 0
|
6月前
|
前端开发 数据挖掘 数据建模
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例(中)
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例
|
2月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
6月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化
|
6月前
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
2月前
|
数据采集 数据可视化 数据挖掘
R语言在金融数据分析中的深度应用:探索数据背后的市场智慧
【9月更文挑战第1天】R语言在金融数据分析中展现出了强大的功能和广泛的应用前景。通过丰富的数据处理函数、强大的统计分析功能和优秀的可视化效果,R语言能够帮助金融机构深入挖掘数据价值,洞察市场动态。未来,随着金融数据的不断积累和技术的不断进步,R语言在金融数据分析中的应用将更加广泛和深入。