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

时间:2019-09-17 08:24:51

标签: r spatial raster

我有一个空间数据的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)})

但是这不符合我的想法。知道怎么做吗?

1 个答案:

答案 0 :(得分:1)

我已修改您在创建可复制示例中所做的操作,以避免出错。希望这会有所帮助:

#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])))