R 按值的最高XY百分比子集光栅
我想为dataframe做一些等效于分位数子集的事情,但对于光栅。 基本上,我想知道光栅中最高20%的值在哪里,并创建一个只包含这些单元格的新光栅。在这方面: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结构
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类型的,我希望对光栅图层也这样做。无论如何,感谢您的评论。