R 按值的最高XY百分比子集光栅

R 按值的最高XY百分比子集光栅,r,statistics,subset,percentage,raster,R,Statistics,Subset,Percentage,Raster,我想为dataframe做一些等效于分位数子集的事情,但对于光栅。 基本上,我想知道光栅中最高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)) xy使用光栅函数创建的对象具有复杂的S4结构

我想为dataframe做一些等效于分位数子集的事情,但对于光栅。 基本上,我想知道光栅中最高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))

xy使用光栅函数创建的对象具有复杂的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 slot的@values子slot。因此,您可能想要(认识到这个问题已经有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具有从其矩阵继承的维度。将数字向量强制为无任何维度的矩阵将使其成为“一维”。使用光栅函数创建的对象具有复杂的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 slot的@values子slot。因此,您可能想要(认识到这个问题已经有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具有从其矩阵继承的维度。将数字向量强制为没有任何维度的矩阵将使其成为“一维”。您可以这样做

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)
库(光栅)
你可以这样做

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)
库(光栅)

r
子集(xy_-df,layer>=分位数(layer,0.8,na.rm=TRUE))
?是的,但这是用于data.frame类型的,我想对光栅层做同样的操作。感谢您在任何情况下的评论。
子集(xy_-df,layer>=分位数(layer,0.8,na.rm=TRUE))
?是的,但这是针对data.frame类型的,我希望对光栅图层也这样做。无论如何,感谢您的评论。