R中的反距离加权

Inverse Distance Weighting in R

正在尝试使用 IDW 插入一组数据。我能够引入 csv 并将其转换为空间点数据框。我的列标题是纬度和经度而不是 x 和 y。

由于 csv 代表农田,因此坐标的距离非常小。结果,代码认为 x 和 y 的最小坐标和最大坐标相同,因为 as.numeric 删除小数点并四舍五入坐标。 这就是代码出错的地方,因为当我尝试 运行 expand.grid 时,它发现 x.range[1]x.range[2].

没有区别

有人看到可以修复的问题吗?有没有办法在我的坐标中携带更多的小数点,以确保 x.range[1]x.range[2] 之间存在差异,同样 y.range?

path<- setwd()

library(ggplot2)
library(gstat)
library(sp)
library(maptools)
#Checking rgeos availability: TRUE
nuclides <- read.csv("fieldnuclides.csv")

#convert this basic data frame into a spatial points data frame
coordinates(nuclides) = ~ lon + lat

## Create a grid from the values in your points dataframe
## first get the range in data
x.range <- as.numeric(range(nuclides@coords[,1]))
y.range <- as.numeric(range(nuclides@coords[,2]))

nuclides.grd <- expand.grid(x = seq(from = x.range[1], to = x.range[2], by = 3.5), y = seq(from = y.range[1], to = y.range[2], by = 3.5))
# 
# ## convert grid to SpatialPixel class
coordinates(nuclides.grd) <- ~ x+y
gridded(nuclides.grd) <- TRUE
# 

我的x.rangey.range总结如下

summary(x.range)
Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-80.65  -80.64  -80.64  -80.64  -80.64  -80.63 
summary(y.range)
Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
43.42   43.43   43.43   43.43   43.43   43.43 

所以有区别但是 coordinates(nuclides.grd) 给我下面的错误说明它是一个点,但是根据摘要是有区别的 坐标(nuclides.grd)<-~x+y 网格化(nuclides.grd)<-真 points2grid(points, tolerance, round) 错误: 无法从单点导出网格参数!

嗯,根据您的总结,x 的范围是 0.02,y 的范围是 0.01。但是,在您的 expand.grid 调用中,您要求从最小值到最大值的序列,步长为 3.5。因此,您的 seq 调用将每个 return 1 个值,而您的 expand.grid 将是一个点。

我建议在您的 seq 通话中将 by = 3.5 替换为 length.out = 10。然后您将在序列中获得多个值,在我们的网格中获得多个点。

作为一种调试技术,请检查您的输入!你说错误是 coordinates(nuclides.grd) 说这是一个单点。这很容易验证!检查 nuclides.grd 是否是单点(是的,是),然后查看它的定义位置。