gpt4 book ai didi

r - 计算 R 中的加权多边形质心

转载 作者:行者123 更新时间:2023-12-04 14:13:04 27 4
gpt4 key购买 nike

我需要根据单独的人口网格数据集计算一组空间区域的质心。感谢指导如何在下面的示例中实现这一点。

提前致谢。

require(raster)
require(spdep)
require(maptools)

dat <- raster(volcano) # simulated population data
polys <- readShapePoly(system.file("etc/shapes/columbus.shp",package="spdep")[1])

# set consistent coordinate ref. systems and bounding boxes
proj4string(dat) <- proj4string(polys) <- CRS("+proj=longlat +datum=NAD27")
extent(dat) <- extent(polys)

# illustration plot
plot(dat, asp = TRUE)
plot(polys, add = TRUE)

enter image description here

最佳答案

三个步骤:

首先,找到每个多边形中的所有单元格,返回一个包含单元格编号和值的 2 列矩阵列表:

require(plyr) # for llply, laply in a bit...
cell_value = extract(dat, polys,cellnumbers=TRUE)
head(cell_value[[1]])
cell value
[1,] 31 108
[2,] 32 108
[3,] 33 110
[4,] 92 110
[5,] 93 110
[6,] 94 111

其次,转换为相似矩阵的列表,但添加 x 和 y 坐标:
cell_value_xy = llply(cell_value, function(x)cbind(x,xyFromCell(dat,x[,"cell"])))
head(cell_value_xy[[1]])
cell value x y
[1,] 31 108 8.581164 14.71973
[2,] 32 108 8.669893 14.71973
[3,] 33 110 8.758623 14.71973
[4,] 92 110 8.581164 14.67428
[5,] 93 110 8.669893 14.67428
[6,] 94 111 8.758623 14.67428

第三,计算加权平均坐标。这忽略了任何边缘效应并假设所有网格单元的大小相同:
centr = laply(cell_value_xy, function(m){c(weighted.mean(m[,3],m[,2]), weighted.mean(m[,4],m[,2]))})
head(centr)
1 2
[1,] 8.816277 14.35309
[2,] 8.327463 14.02354
[3,] 8.993655 13.82518
[4,] 8.467312 13.71929
[5,] 9.011808 13.28719
[6,] 9.745000 13.47444

现在 centr是一个 2 列矩阵。在您的示例中,它非常接近 coordinates(polys)所以我会用一些极端的权重做一个人为的例子,以确保它按预期工作。

关于r - 计算 R 中的加权多边形质心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23613655/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com