当前位置: 首页 > 知识库问答 >
问题:

R中的光栅:创建特定单元格值的分区计数,无需重新分类

屠钊
2023-03-14

我想知道是否有办法为光栅图层对象创建分区统计数据,特别是R中给定单元值(例如土地使用类别)的计数,而无需重新分类整个光栅。解决方案应具有内存效率,以便处理大型光栅文件,即不需要将值提取到R中的矩阵中。

下面是一个到目前为止我是如何处理它的示例。在这种情况下,我将原始光栅重新分类为仅保留1的利息值和所有其他值的缺失值。

我提出的解决方案创建了冗余数据和额外的处理步骤,以实现我的初始目标。我认为类似于分区(r1[r1==6],r2,“count”)的方法可以奏效,但显然不行(见下文)。

# generate reproducible Raster 
library("raster")

## RASTER 1 (e.g. land-use classes)
r1 <- raster( crs="+proj=utm +zone=31")
extent(r1) <- extent(0, 100, 0, 100)
res(r1) <- c(5, 5)
values(r1) <- sample(10, ncell(r1), replace=TRUE)
plot(r1)

## RASTER 2 (containing zones of interest)
r2 <- raster( crs="+proj=utm +zone=31")
extent(r2) <- extent(0, 100, 0, 100)
res(r2) <- c(5, 5)
values(r2) <- c(rep(1,100),rep(2,100),rep(3,100),rep(4,100))
plot(r2)

# (1) ZONAL STATISTICS
# a. how many cells per zone (independent of specific cell value)
zonal(r1,r2,"count")

# b. how many cells per zone of specific value 6
zonal(r1[r1==6],r2,"count")
# -> fails

# with reclassification
r1.reclass<-
  reclassify(r1,
             matrix(c(1,5,NA,
                    5.5,6.5,1, #class of interest 
                    6.5,10,NA),
                    ncol=3,
                    byrow = T),
             include.lowest=T # include the lowest value from the table.
           )
zonal(r1.reclass,r2,"count")

共有1个答案

邵正雅
2023-03-14

您可以使用光栅::匹配。

zonal(match(r1, 6),r2, "count")

正如您在绘图(匹配(r1,6))中所看到的,它只返回包含所需值的光栅单元格。所有其他单元格均为NA。

很遗憾,try中使用的r1==6返回了一个向量,因此不能再用于焦点。

 类似资料:
  • 在R中,与包“光栅”中的“提取”相比,在包“空间生态”的函数“zonal.stats”中计算平均值存在偏差。对于两者,我都使用多边形作为区域字段,并使用光栅作为值。 这是一个例子: z2和z1偏差的原因是什么?

  • 嗨,光栅战士! 经过数月的数据处理,我对结果感到头痛。我对R和空间分析很陌生,但在我的学习过程中很开心。 这里是我的问题:一旦我将zonal函数应用于一组5个光栅对象(.tif),不知何故,我会在我假设为零的区域中得到重复的值。此外,某些值会显示在其他单元格中。 这里我的代码: 以下是我的结果: 从31到36与从1到6的值相同。 这里是我的一位同事的结果,我正在与他进行比较 正如您所看到的,我得到

  • 我想计算区域内的分区统计数据,以符合等宽。 得到区段列表后,想法是分配块号,因为栅格::区段函数需要一个带有表示区段代码的栅格层。 当我尝试用分区编号填充范围时,填充的区域与范围不对应(请参见图)。为什么会这样?

  • 这是将Spark dataframe保存为Hive中的动态分区表的后续操作。我试图在答案中使用建议,但无法在Spark 1.6.1中使用 任何推动这一进程的帮助都是感激的。 编辑:还创建了SPARK-14927

  • 我目前正在尝试根据条件计算创建一个新的光栅或形状文件,需要根据光栅文件中的值对形状值中的每个值进行计算。我通常不使用光栅和形状文件,所以我对这里的元素很不熟悉。我是笼统地问这个问题,但以下是我使用的数据,希望它能让我更好地理解我试图实现的目标: 主要目标是取与shp_probs中的每个点(纬度和经度)相关的概率,并将其乘以对应于rast_norm中相同纬度和经度的值,以及之后的一些其他计算。如果我

  • 假设我有一个1.2 GB的文件,那么考虑到128 MB的块大小,它将创建10个分区。现在,如果我将其重新分区(或合并)为4个分区,这意味着每个分区肯定会超过128 MB。在这种情况下,每个分区必须容纳320 MB的数据,但块大小是128 MB。我有点糊涂了。这怎么可能?我们如何创建一个大于块大小的分区?