我正在使用R中的数据框架,它具有以下结构:
summary(data)
X Y Z type
Min. : 2.94 Min. :22.48 Min. :1.000 Length:225176
1st Qu.: 22.39 1st Qu.:48.17 1st Qu.:1.000 Class :character
Median : 29.64 Median :52.19 Median :1.000 Mode :character
Mean : 29.68 Mean :51.79 Mean :1.007
3rd Qu.: 39.30 3rd Qu.:56.01 3rd Qu.:1.000
Max. :150.47 Max. :69.26 Max. :2.000
str(data)
Classes ‘data.table’ and 'data.frame': 225176 obs. of 4 variables:
$ X : num 38.3 38.4 38.4 38.5 38.5 ...
$ Y : num 63.4 63.4 63.4 63.4 63.4 ...
$ Z : num 1 1 1 1 1 1 1 1 1 1 ...
$ type: chr "buffer" "buffer" "buffer" "buffer" ...
- attr(*, ".internal.selfref")=<externalptr>
table(data$type)
type
buffer presence pseudo.abs
222436 1646 1094
它是一个栅格,在纬度/纬度投影表示我提取的数据为一个物种。所有的点都是在gis环境(GRASS gis)中从同一栅格图中提取的,所以我们可以说这个数据框是这个栅格图的子样本。
我的目标是使用这个数据帧的存在和缓冲行来制作栅格,但是我得到了这个错误:
library(raster)
raster <- rasterFromXYZ(filter(data, type!="pseudo.abs")[,1:3]) # filtering out unnecessary rows
Error in rasterFromXYZ(filter(data, type!="pseudo.abs")[,1:3]) :
x cell sizes are not regular
然后我分别检查了缓冲区和存在数据,结果发现它们具有不同的分辨率:
data.presence <- rasterFromXYZ(filter(data, type=="presence")[,1:3])
data.presence
class : RasterLayer
dimensions : 413, 807, 333291 (nrow, ncol, ncell)
resolution : 0.04489828, 0.04489264 (x, y)
extent : 8.258507, 44.49142, 41.49054, 60.0312 (xmin, xmax, ymin, ymax)
crs : NA
source : memory
names : presence
values : 1, 1 (min, max)
data.buffer <- rasterFromXYZ(filter(data, type=="buffer")[,1:3])
data.buffer
class : RasterLayer
dimensions : 515, 934, 481010 (nrow, ncol, ncell)
resolution : 0.04899959, 0.04900172 (x, y)
extent : 2.915476, 48.68109, 38.14953, 63.38541 (xmin, xmax, ymin, ymax)
crs : NA
source : memory
names : presence
values : 1, 1 (min, max)
它们怎么可能有不同的分辨率,即使它们是使用相同的光栅作为输入提取的?
是否有任何解决方案来转换这个数据帧在一个单一的栅格或合并存在和缓冲行在一个单一的栅格?
即使它们是使用相同的栅格作为输入提取的,它们如何可能具有不同的分辨率?
这并不意外。rasterFromXYZ
不知道该分辨率(因为您没有设置res
参数)。它试图找到由点支持的最低分辨率。如果没有两个相邻的细胞被采样,得到的分辨率会更低。是什么原始分辨率?
所有点都是在gis环境(GRASS gis)中从同一栅格图中提取的,因此我们可以说该数据帧是该栅格图的子样本。
坐标可能是用于提取数据的点,而不是它们所在的网格单元的中心。
无论哪种方式,你都在以一种好的方式处理这件事。如果你从栅格数据开始,你不应该使用rasterFromXYZ
。您可以使用cellFromXY
找到一个点所属的单元格,并使用这些单元格来设置您想要设置的值。你也可以得到单元格号,当你提取栅格值在R.也许你可以编辑你的问题,或问一个新的,通过创建一个小的例子在R.现在你的数据来自任何地方,你的方法是次优的,你的假设似乎是错误的;这让我很难帮你。