子集栅格按最高XY百分比值

时间:2016-05-02 13:42:24

标签: r statistics subset percentage raster

我想为数据帧执行与分位数相当的子集,但是对于栅格。 基本上我想知道我的栅格中最高20%的值在哪里,并创建一个只包含那些单元格的新栅格。这方面的一些事情:

xy <- raster(matrix(rnorm(400),20,20))

xy_df <- as.data.frame(xy)
xy_df <- subset(xy_df, layer <= quantile(layer, 0.2, na.rm = TRUE))

这个子集设置了数据帧中最低值的20%,但是我希望将栅格中最高值的20%作为子集。

提前谢谢。

2 个答案:

答案 0 :(得分:0)

使用栅格函数创建的对象具有复杂的S4结构。这是xy上str输出的一部分:

 str(xy)
#----------------------
Formal class 'RasterLayer' [package "raster"] with 12 slots
  ..@ file    :Formal class '.RasterFile' [package "raster"] with 13 slots
  .. .. ..@ name        : chr ""
  .. .. ..@ datanotation: chr "FLT4S"
  .. .. ..@ byteorder   : chr "little"
  .. .. ..@ nodatavalue : num -Inf
  .. .. ..@ NAchanged   : logi FALSE
  .. .. ..@ nbands      : int 1
  .. .. ..@ bandorder   : chr "BIL"
  .. .. ..@ offset      : int 0
  .. .. ..@ toptobottom : logi TRUE
  .. .. ..@ blockrows   : int 0
  .. .. ..@ blockcols   : int 0
  .. .. ..@ driver      : chr ""
  .. .. ..@ open        : logi FALSE
  ..@ data    :Formal class '.SingleLayerData' [package "raster"] with 13 slots
  .. .. ..@ values    : num [1:400] -0.00111 0.30574 1.15131 0.62849 -0.75049 ...
  .. .. ..@ offset    : num 0
  .. .. ..@ gain      : num 1
  .. .. ..@ inmemory  : logi TRUE
  .. .. ..@ fromdisk  : logi FALSE
  .. .. ..@ isfactor  : logi FALSE
  .. .. ..@ attributes: list()
  #............... remainder omitted

values"["函数都可以检索@data插槽的@values子插槽。因此,也许您想要(认识到这个问题2年来一直没有得到回答和评论)

rs):

   raster( as.matrix(values(xy)[ values(xy) >= quantile(values(xy), 0.8, na.rm=TRUE)] ))
class       : RasterLayer 
dimensions  : 80, 1, 80  (nrow, ncol, ncell)
resolution  : 1, 0.0125  (x, y)
extent      : 0, 1, 0, 1  (xmin, xmax, ymin, ymax)
coord. ref. : NA 
data source : in memory
names       : layer 
values      : 0.7850559, 3.600096  (min, max)

目前尚不清楚栅格的预期结构。原始xy具有从其矩阵继承的尺寸。将数字向量强制为无任何维数的矩阵会使其保持“一维”。

答案 1 :(得分:0)

您可以做到

library(raster)
r <- raster(matrix(rnorm(400),20,20))
q <- quantile(r, 0.8)
x <- reclassify(r, cbind(-Inf, q, NA))

q
#      80% 
#0.7833264 
x
#class       : RasterLayer 
#dimensions  : 20, 20, 400  (nrow, ncol, ncell)
#resolution  : 0.05, 0.05  (x, y)
#extent      : 0, 1, 0, 1  (xmin, xmax, ymin, ymax)
#coord. ref. : NA 
#data source : in memory
#names       : layer 
#values      : 0.786266, 2.45623  (min, max)

plot(x)