如何通过R中的加权平均值栅格化点数据?

How to rasterize point data by weighted average in R?

我有一个 data.frame 空间数据,其中包含按田地划分的作物产量。我想通过栅格化这些数据来制作热图。我已经能够使用栅格平均值制作地图。我可以通过计算加权平均值来改进这一点,权重是地块面积。到目前为止我还没能完成这项工作。

这是我作为最小示例所做的:

require(dplyr)
require(raster)
require(sf)

d <- data.frame(longitude = runif(100, 10, 30),
                latitude = runif(100, 40, 50),
                yield = runif(100, 2, 6),
                area = runif(100, .1, 10)) %>%
    st_as_sf(coords = c("longitude", "latitude"))

r <- raster(extent(c(min(d$longitude), max(d$longitude),
                     min(d$latitude), max(d$latitude))))

x <- rasterize(d, r, field = "yield", mean)

为了实现我所需要的,我尝试了例如将最后一行替换为:

x <- rasterize(d, r, field = "yield", function(y){weighted.mean(y, w = area)})

但这并不像我想的那样有效。知道怎么做吗?

我已经修改了您在创建可重现示例时所做的操作以避免出现错误。希望这会有所帮助:

#require(dplyr) #looks redundant
require(raster)
require(sf)

d <- data.frame(longitude = runif(100, 10, 30),
                latitude = runif(100, 40, 50),
                yield = runif(100, 2, 6),
                area = runif(100, .1, 10)) %>%
                st_as_sf(coords = c("longitude", "latitude"))

r <- raster(extent(c(st_bbox(d)))) #modified

x1 <- rasterize(d, r, field = "yield", mean)
x2 <- rasterize(d, r, field = "yield", fun=function(x,...) (sum(x[1]*x[2])/sum(x[2])))