【问题标题】:R - Rename ID names of a spatial objectR - 重命名空间对象的 ID 名称
【发布时间】:2017-11-13 13:00:47
【问题描述】:

我的目标是更改 SpatialPolygon 对象的 ID 名称。我知道如何访问 ID 名称,但我坚持要重命名它们。

这是一个示例(它是 SpatialPolygonDataFrame,但在我的“真实”情况下它是 SpatialPolygon,因此多边形和数据框之间没有必要的链接):

library(rgdal)
library(rgeos)
library(sp)
library(maptools)

data(wrld_simpl)
mymap.sp <- wrld_simpl[which(wrld_simpl$ISO3 == "ATG" |
                             wrld_simpl$ISO3 == "BRA" |
                             wrld_simpl$ISO3 == "FRA" |
                             wrld_simpl$ISO3 == "CIV"), ]

# access to the ID names
sapply(slot(mymap.sp, "polygons"), function(x) slot(x, "ID"))
[1] "ATG" "BRA" "FRA" "CIV"

假设我想将这些 ID 名称替换为“1”、“2”、“3”、“4”。

【问题讨论】:

  • 你想把名字改成什么?
  • 我已经完成了我的帖子来回答你的问题。
  • Warning message: In data(wrld_simpl) : data set ‘wrld_simpl’ not found
  • @Nate wrld_simplmaptools 包中。
  • 抱歉忘记maptools,我再次更正了帖子。

标签: r polygon spatial


【解决方案1】:

如果性能不是问题,您可以在 for 循环中执行此操作:

new_IDs = paste0("ID", 1:4)
for (i in 1:length(slot(mymap.sp, "polygons"))){
  slot(slot(mymap.sp, "polygons")[[i]], "ID") = new_IDs[i]
}

【讨论】:

  • 非常感谢。我正在清理一个非常混乱的多边形数据框,这对我有所帮助。
【解决方案2】:

我建议使用sp::spChFIDs 函数而不是滚动您自己的循环。具体来说,您可以像这样更改您的 ID:

mymap.sp <- sp::spChFIDs(mymap.sp, as.character(1:4))

【讨论】:

  • 我同意 - 你的方法效果很好。为了概括起见,我建议将最后一部分更改为 ...as.character(1:length(mymap.sp)) 而不是硬编码。
猜你喜欢
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 2014-10-05
  • 2023-03-25
  • 2011-04-15
  • 2015-02-13
  • 2011-07-11
相关资源
最近更新 更多