Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-寻找不同id值的质心_R - Fatal编程技术网

R-寻找不同id值的质心

R-寻找不同id值的质心,r,R,我试图找到我创建的空间点数据帧的质心。以下是名为“spdf”的数据帧片段 我使用“rgeos”包中的函数“gCentroid”来识别质心。我可以使用gCentroid(spdf,byid=FALSE)计算整个数据帧的质心,但是当我尝试使用gCentroid(spdf,byid=TRUE,id=“Name”)根据“Name”字段计算质心时,会出现错误。。换言之,基于上述数据,我想得到名称“12”和“16”的两个质心。关于“id”字段的gCentroid文档很少。有人对我如何计算每个“名称”的质心有

我试图找到我创建的空间点数据帧的质心。以下是名为“spdf”的数据帧片段


我使用“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