我有一个空间数据的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)})
但是这不符合我的想法。知道怎么做吗?
答案 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])))