替换 SpatialPolygonsDataFrame 列表中特定@data 列中的 NA

Replace NAs within a specific @data column within a SpatialPolygonsDataFrame list

我有一个包含 65 个 SpatialPolygonDataFrames 的大列表,名为 map_years。我需要在此列表中的 SPDF 中的 @data 插槽中的列中用零替换 NA。

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

> 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

下面是这个列表结构的截图:

编辑: 我只是在使用 maptools 数据集 wrld_simpl 的略微修改版本,所以任何编辑 @data data(wrld_simpl) 数据集中的列有效。

因为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