我知道这是一个非常简单的问题,但我现在很难过。
如何为R中的SpatialPointsDataFrame将NA或0.00更改为NA&? 我只想为某些列做这个。
例如,如果我有一个名为l8.stations的数据集,我只想这样做 l8.stations [,11:18],你是怎么做到的?
答案 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)