r - 使用R根据另一个栅格的特定值从栅格中提取像素

标签 r dataframe raster r-raster

我使用 A 函数在 R 中导入了两个栅格(栅格 B)raster)。
我想提取A的像素哪里B等于 1 进入数据帧。
我正在尝试以下操作,但是,我获得的所有像素都具有相同的值,尽管它们在原始数据集中各不相同。

这两个栅格具有相同的维度(ncols、nrows、ncell、分辨率、范围、投影)。

library(raster)
library(rgdal)

# import inputs
A <- raster('/pat/to/rasterA.tif')
B <- raster('/pat/to/rasterB.tif')

# extract raster values from A over raster B where B == 1
mydata <- data.frame(A[B[B == 1]])

编辑 1

可能是我做的时候 A[B[B == 1]] ,来自 RasterLayer 的对象 A 和 B 的类变成 numeric ,这会产生问题吗?我通过做 class(A[B[B == 1]]) 发现了这一点,这给 numeric .

编辑 2

好吧,这很奇怪。我试着做 mydata <- data.frame(A[B])现在输出有原始 A仅在 B == 1地点。在从 A 中提取所有像素之前尝试此操作(正如我所料)。我可以通过计算 B 中的个数来确认它是正确的。以及 mydata 中的元素数量,这是一样的。就像索引跳过了 B 中的所有零一样.谁能解释一下?

最佳答案

请在这样的问题中包含一些示例数据:

library(raster)
r <- raster(nrow=5, ncol=5, xmn=0, xmx=1, ymn=0, ymx=1)
set.seed(1010)
A <- setValues(r, sample(0:5, ncell(r), replace=TRUE))
B <- setValues(r, sample(0:2, ncell(r), replace=TRUE))

现在你可以这样做:
s <- stack(A,B)
v <- as.data.frame(s)
v[v[,2] == 1, 1]

或者
A[B==1]

或者
D <- overlay(A, B, fun=function(x,y){ x[y!=0] <- NA; x})
na.omit(values(D))

或者
xy <- rasterToPoints(B, function(x) x == 1)
extract(A, xy[,1:2])

或者
A[B!=1] <- NA
rasterToPoints(A)[, 3]

等等...

现在为什么会这样:A[B[B == 1]]不行?打开包装:
B[B == 1]
# [1] 1 1 1 1 1 1 1 1 1 1
B的单元格值哪里B==1当然,是 1 . A[B[B == 1]]从而变成 A[c(1,1,1,..)] , 并多次返回第一个单元格的值。
A[B]相当于 A[B!=0]B在这种情况下被认为是一个逻辑语句,并且 0 == FALSE和所有其他值是 TRUE

关于r - 使用R根据另一个栅格的特定值从栅格中提取像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34826410/

相关文章:

python - 如何在DataFrame中找到相同的行——python

r - 有条件删除面板数据

r - 绘制光栅文件

open-source - 区域统计 QGIS

r - 在 r 中提取具有条件的唯一行

r - 带有 geom_jitter 图例标题的 ggplot 箱线图

r - 使用 R xtable 在 latex 表中的行之间添加一条水平线

r - 循环获取代码簿打印 null 的列名称

r - 将从矩阵创建的没有任何列和行名称的表转换为数据框

r - 如何提高处理大型光栅堆栈的 R 处理速度?