将数据帧中的一列添加到 SpatialPolygon 数据帧

Lor*_*ori 3 mapping statistics geography r tmap

我一直在尝试将一列数值数据从数据帧添加到SpatialPolygon数据帧,但每次尝试都会导致后者被转换为类似于前者的标准数据帧。我需要添加该列,以便我可以创建一个以该列的变量为焦点的等值线图。显然,标准数据框不好,因为我正在尝试使用tmap.

这就是我一直在尝试添加列的方式(shapefilecomb空间数据框在哪里,wardturnout是包含相关列的变量):

shapefilecomb <- c(wardturnout)
Run Code Online (Sandbox Code Playgroud)

Jin*_*cko 5

通过赋值运算符将一列添加到 SpatialPolygonsDataFrame 的数据槽中是可行的shapefilecomb$wardturnout <- wardturnout,但这并不是最安全的方法。它仅依赖于位置(第一个数据项进入第一个多边形,第二个进入第二个,依此类推)。它可能会变得混乱。

最好保留用于计算字段 -shapefile$valuepercapita <- shapefile$value / shapefile$population分配类型。

对于来自外部来源的数据,最好按键分配值。功能append_datatmap包装确实很漂亮,不仅发生错误时给你一个消息,而且当所有的数据完全匹配的确认(这是我的大套不完整的数据的工作时,发现作为一个很好的接触)。

outShape <- append_data(srcShape, frmData, key.shp = "KOD_LAU1", key.data = "LAU1")

编辑(截至 2019 年 9 月):这个答案似乎仍然很强劲......尽管世界已经改变。

  1. tmap::append_data()已移至tmaptools::append_data() 现在已弃用

  2. sf已替换sp为 R 中空间数据的首选包

sf世界上,空间数据存储在 modified 中data.frames,按键分配数据项的最合适方法是*_join()from的功能之一 dplyr- 要么dplyr::left_join()安全,要么dplyr::inner_join()两侧过滤实际上是所需的行为。