R:对于没有数据的缓冲区,加权平均值为 0

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

我是 R 的新手,在解决这个问题时遇到困难,因此我们将不胜感激。 我有每日洪水栅格数据,用于计算某些位置周围缓冲区中洪水的加权平均值。我清理了 QGIS 中的栅格,并使用 R 通过以下几行计算加权平均值:

library(sp)
library(raster)
library(ggplot2)
library(sf)

     # Load the raster file into R
      flooding_raster_data <- raster(raster_file)
      
      # Print information or perform further processing as needed
      print(paste("Loaded raster file:", raster_file))
      
      # Extract values from the raster that fall within the buffer polygons
      raster_values_in_buffer_weight <- extract(flooding_raster_data, buffer, fun = mean, na.rm = TRUE, weights=TRUE)
      
      # Create a new buffer object with the extracted floodshare values
      buffer_with_mean <- st_as_sf(buffer)
      buffer_with_mean$floodshare <- raster_values_in_buffer_weight
      
      # Write the sf object to a shapefile
      st_write(buffer_with_mean, output_file_path, append = FALSE)
      rm(flooding_raster_data, buffer_with_mean, raster_values_in_buffer_weight, raster_file)

我的问题是,对于没有数据的栅格(在 QGIS 中编码为没有数据),缓冲区的加权平均值为 0。我已经根据 QGIS 中的区域平均值检查了这一点,并且这些相同的缓冲区在 QGIS 中的区域平均值为 NULL。我正在努力弄清楚为什么在 R 中会发生这种情况,因为我认为 R 会导致平均 NA 或缺失,所以如果有人知道为什么,请告诉我以及如何解决这个问题。再说一次,我是 R 的初学者,所以我可能错过了一些非常明显的东西。

我尝试使 na.rm = FALSE 因为我认为问题可能出在我在 R 代码中处理 NA 值的方式,但这只是使所有加权平均值为 NULL 所以我认为我不理解 R 如何处理缺失数据。

r raster qgis weighted-average
1个回答
0
投票

也许您想确定栅格对象中的 NA 数据是什么。 R 中的 NA 读为 0 吗?

如果是这样,请更换它们:

flooding_raster_data <- raster(raster_file)
plot(flooding_raster_data) ## check 0 and NA values
raster_data[flooding_raster_data[] == 0] <- NA
plot(flooding_raster_data) ## check 0 and NA values

检查使用该(或其他)数据替换是否可以重现预期结果

© www.soinside.com 2019 - 2024. All rights reserved.