R - Finding centroids of different id values
我正在尝试找到我创建的 SpatialPointsDataFrame 的质心。以下是名为"spdf"的数据框片段。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Name X Y 1 16 56 39 2 16 57 39 3 16 55 38 4 16 55 37 5 16 54 38 6 16 55 39 7 16 55 40 8 12 58 41 9 12 56 45 10 12 58 43 11 12 56 42 12 12 55 44 13 12 55 47 |
我正在使用"rgeos"包中的"gCentroid"函数来识别质心。我可以使用
文档有点混乱,但是您没有指定 ID 输入,而是指定了输出。您的示例中的每个点都有自己的 ID(数据框的行名,根据定义必须是唯一的)。但是,您可以通过
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 |
附言我一直认为你应该能够做到这一点,我有一个
如果你通过取 X 和 Y 值的平均值来计算质心,你可以使用
1 2 3 4 | aggregate(.~Name, data=dat, mean) # Name X Y # 1 12 56.33333 43.66667 # 2 16 55.28571 38.57143 |
这似乎与
的结果相匹配
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 |