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.range
和y.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
是否是单点(是的,是),然后查看它的定义位置。
正在尝试使用 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.range
和y.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
是否是单点(是的,是),然后查看它的定义位置。