R-寻找不同id值的质心
我试图找到我创建的空间点数据帧的质心。以下是名为“spdf”的数据帧片段R-寻找不同id值的质心,r,R,我试图找到我创建的空间点数据帧的质心。以下是名为“spdf”的数据帧片段 我使用“rgeos”包中的函数“gCentroid”来识别质心。我可以使用gCentroid(spdf,byid=FALSE)计算整个数据帧的质心,但是当我尝试使用gCentroid(spdf,byid=TRUE,id=“Name”)根据“Name”字段计算质心时,会出现错误。。换言之,基于上述数据,我想得到名称“12”和“16”的两个质心。关于“id”字段的gCentroid文档很少。有人对我如何计算每个“名称”的质心有
我使用“rgeos”包中的函数“gCentroid”来识别质心。我可以使用
gCentroid(spdf,byid=FALSE)
计算整个数据帧的质心,但是当我尝试使用gCentroid(spdf,byid=TRUE,id=“Name”)根据“Name”字段计算质心时,会出现错误。
。换言之,基于上述数据,我想得到名称“12”和“16”的两个质心。关于“id”字段的gCentroid文档很少。有人对我如何计算每个“名称”的质心有什么建议吗?如果你是通过取X和Y值的平均值来计算质心,你可以使用聚合:
aggregate(.~Name, data=dat, mean)
# Name X Y
# 1 12 56.33333 43.66667
# 2 16 55.28571 38.57143
这似乎与gCentroid
的结果相匹配:
library(sp)
library(rgeos)
spdf <- dat
coordinates(spdf) <- c("X", "Y")
gCentroid(spdf[spdf$Name == 12,], byid=FALSE)
# SpatialPoints:
# x y
# 1 56.33333 43.66667
# Coordinate Reference System (CRS) arguments: NA
gCentroid(spdf[spdf$Name == 16,], byid=FALSE)
# SpatialPoints:
# x y
# 1 55.28571 38.57143
# Coordinate Reference System (CRS) arguments: NA
库(sp)
图书馆(rgeos)
spdf文档有点混乱,但是您没有指定ID输入,而是指定了输出。示例中的每个点都有自己的ID(数据帧的行名称,根据定义,行名称必须是唯一的)。但是,通过在df$Name
中使用唯一值对数据帧进行子集设置,并以这种方式计算质心,您可以轻松获得所需的输出
ctrs <- lapply( unique( df$Name ) , function(x) gCentroid( SpatialPoints( df[ df$Name == x , c('X','Y') ] ) ) )
setNames( ctrs , unique(df$Name ) )
#$`16`
#SpatialPoints:
# x y
#1 55.28571 38.57143
#Coordinate Reference System (CRS) arguments: NA
#$`12`
#SpatialPoints:
# x y
#1 56.33333 43.66667
#Coordinate Reference System (CRS) arguments: NA
ctrs您的问题不可重复。您需要添加库(sp);坐标(spdf)=c(“X”,“Y”)
在图中。是的,你说得对,大卫。我需要补充一点。但是,请注意,当您获取投影点的质心(即具有有效的proj4string
)时,情况可能并非如此,尤其是在较大的地理距离上。。。(指向球体)谢谢约瑟伯。您是正确的,这似乎也起作用。我将反复讨论是使用这个方法(干净的)还是上面Simon的方法。我想我更喜欢使用gCentroid固有的函数,以防将来使用投影。@SimonO'Hanlon谢谢——这当然是真的,对于投影点,你的方法肯定是更好的选择!我注意到的一点是,在运行gCentroid之后,没有与空间点关联的“名称”。是否有办法将其重新连接到输出,或者我只是缺少了什么?@user2359494当然。我已经稍微更新了一下,以显示如何通过调用setNames
来实现这一点。嗯。
ctrs <- lapply( unique( df$Name ) , function(x) gCentroid( SpatialPoints( df[ df$Name == x , c('X','Y') ] ) ) )
setNames( ctrs , unique(df$Name ) )
#$`16`
#SpatialPoints:
# x y
#1 55.28571 38.57143
#Coordinate Reference System (CRS) arguments: NA
#$`12`
#SpatialPoints:
# x y
#1 56.33333 43.66667
#Coordinate Reference System (CRS) arguments: NA