我想为数据帧执行与分位数相当的子集,但是对于栅格。 基本上我想知道我的栅格中最高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%作为子集。
提前谢谢。
答案 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)