【问题标题】:Replace NAs within a specific @data column within a SpatialPolygonsDataFrame list替换 SpatialPolygonsDataFrame 列表中特定 @data 列中的 NA
【发布时间】:2018-02-05 23:53:24
【问题描述】:

我有一个包含 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(wrld_simpl) 数据集中编辑@data 列的任何示例都有效。

【问题讨论】:

  • 试试map_years[["map1951"]]@data$CATCH[is.na(map_years[["map1951"]]@data$CATCH)] &lt;- 0`
  • 好的,谢谢!我放弃了不断使用 [] @ $ 等。如果您添加答案,我会将其标记为正确。
  • 谢谢。请看我的帖子。

标签: r sp


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 2023-03-21
    • 2013-10-23
    • 1970-01-01
    相关资源
    最近更新 更多