【问题标题】:Change 0's in SpatialPointsDataFrame to NA for certain columns in R对于 R 中的某些列,将 SpatialPointsDataFrame 中的 0 更改为 NA
【发布时间】:2017-08-11 02:37:14
【问题描述】:

我知道这是一个非常简单的问题,但我现在很难过。

如何将 R 中的 SpatialPointsDataFrame 的 0 或 0.00 更改为 NA? 我只想对某些列执行此操作。

例如,如果我有一个名为 l8.stations 的数据集,我只想为 l8.stations[,11:18],你是怎么做到的?

【问题讨论】:

    标签: r replace geospatial spatial na


    【解决方案1】:

    这似乎比在标准 data.frame 上稍微复杂一些。一种方法是将要更改的数据列提取到标准 data.frame 中。然后以正常方式更改它们,使用 data.frame 子集和赋值 - 请参阅here

    例如,将第 5:8 列中的整数零更改为 NA,我们可以这样做:

    df = as.data.frame(l8.stations)[, 5:8]       # extract desired columns into a data.frame
    df[df == 0] = NA                             # change values that are zero into NA
    l8.stations[1:NROW( l8.stations), 5:8] = df  # insert result back into spatial points data frame
    

    现在您还提到对 0.0 的值执行相同的操作。在这种处理实数而不是整数的情况下,我们真正应该测试的不是等于零,而是该值小于某个小数阈值。要了解为什么我们使用实数来执行此操作,而不是简单地测试它们是否等于零,请阅读 this。因此,例如,要将截止值用作eps = 1e-10,我们可以执行与上述相同的操作,但要测试小于eps 的值:

    df = as.data.frame(l8.stations)[, 5:8]
    df[abs(df) < eps] = NA    
    l8.stations[1:NROW(l8.stations), 5:8] = df
    

    一些可重复的虚拟数据进行测试:

    library(sp)
    
    set.seed(1331)
    pts = cbind(1:5, 1:5)
    dimnames(pts)[[1]] = letters[1:5]
    
    df = data.frame(sample(0:3, 5, T), 
                    sample(0:3, 5, T), 
                    sample(0:3, 5, T), 
                    sample(0:3, 5, T), 
                    sample(0:3, 5, T), 
                    sample(0:3, 5, T), 
                    sample(0:3, 5, T), 
                    sample(0:3, 5, T))
    
    row.names(df) = letters[1:5]
    colnames(df) = LETTERS[1:8]
    l8.stations = SpatialPointsDataFrame(pts, df)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 2017-07-28
      • 2021-04-18
      • 2018-07-25
      • 2012-10-12
      • 1970-01-01
      相关资源
      最近更新 更多