替换SpatialPolygonsDataFrame列表

时间:2018-02-05 23:53:25

标签: r sp

我有一个名为map_years的65个SpatialPolygonDataFrame的大型列表。我需要在此列表中的SPDF内的@data插槽内的列中用零替换NAs。

我可以通过这样做来调用本专栏:

> map_years[["map1951"]]@data$CATCH
  [1]       NA   642.11       NA       NA       NA       NA       NA     0.00   281.65

我可以通过这样做获得哪些是NA的列表:

> is.na(map_years[["map1951"]]@data$CATCH)
  [1]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE

但我无法弄清楚如何更换这些NA。以下不起作用:( -

[1] map_years[is.na(map_years[["map1950"]]@data$CATCH)] <- 0
[2] map_years[[is.na(map_years[["map1950"]]@data$CATCH)]] <- 0
[3] map_years[["map1950"]]@data[is.na(map_years[["map1950"]]@data$CATCH)] <- 0

以下是此列表结构的屏幕截图:

data structure screenshot

修改:我正在处理maptools数据集wrld_simpl的略微修改版本,因此编辑@data列的所有示例data(wrld_simpl)数据集有效。

1 个答案:

答案 0 :(得分:1)

因为map_years[["map1951"]]@data$CATCH是一个向量,我们可以使用相同的技术来替换向量中的值,如下所示。

map_years[["map1951"]]@data$CATCH[is.na(map_years[["map1951"]]@data$CATCH)] <- 0

此外,上述代码可以进一步简化如下。这是访问SpatialPolygonDataFrames中的列的另一种方法,因为简化了对data插槽的访问。

map_years[["map1951"]]$CATCH[is.na(map_years[["map1951"]]$CATCH)] <- 0
相关问题