【发布时间】:2017-08-11 02:37:14
【问题描述】:
我知道这是一个非常简单的问题,但我现在很难过。
如何将 R 中的 SpatialPointsDataFrame 的 0 或 0.00 更改为 NA? 我只想对某些列执行此操作。
例如,如果我有一个名为 l8.stations 的数据集,我只想为 l8.stations[,11:18],你是怎么做到的?
【问题讨论】:
标签: r replace geospatial spatial na
我知道这是一个非常简单的问题,但我现在很难过。
如何将 R 中的 SpatialPointsDataFrame 的 0 或 0.00 更改为 NA? 我只想对某些列执行此操作。
例如,如果我有一个名为 l8.stations 的数据集,我只想为 l8.stations[,11:18],你是怎么做到的?
【问题讨论】:
标签: r replace geospatial spatial na
这似乎比在标准 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)
【讨论】: