对于R中的某些列,将SpatialPointsDataFrame中的0更改为NA

时间:2017-03-19 22:29:26

标签: r replace geospatial spatial na

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

如何为R中的SpatialPointsDataFrame将NA或0.00更改为NA&? 我只想为某些列做这个。

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

1 个答案:

答案 0 :(得分: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)