为什么我得到光栅与不同的分辨率从相同的数据帧在R?

  • 本文关键字:分辨率 数据帧 r raster r-raster
  • 更新时间 :
  • 英文 :


我正在使用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.现在你的数据来自任何地方,你的方法是次优的,你的假设似乎是错误的;这让我很难帮你。

最新更新