我有一个名为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
以下是此列表结构的屏幕截图:
修改:我正在处理maptools
数据集wrld_simpl
的略微修改版本,因此编辑@data
列的所有示例data(wrld_simpl)
数据集有效。
答案 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