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

使用R根据另一个光栅的特定值从光栅中提取像素,r,dataframe,raster,r-raster,R,Dataframe,Raster,R Raster,我使用光栅功能在R中导入了两个光栅(光栅A和B)。 我想将A的像素(其中B等于1)提取到数据帧中。 但是,我正在尝试以下操作,我获得的所有像素都具有相同的值,尽管它们在原始数据集中是不同的 两个光栅具有相同的尺寸(ncols、nrows、ncell、分辨率、范围、投影) 库(光栅) 图书馆(rgdal) #进口投入 A这应适用于1值: A[B == 1] 此外,对于0值 A[B == 0] 请在以下问题中包含一些示例数据: library(raster) r <- raster(nro

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

两个光栅具有相同的尺寸(ncols、nrows、ncell、分辨率、范围、投影)

库(光栅)
图书馆(rgdal)
#进口投入

A这应适用于1值:

A[B == 1]
此外,对于0值

A[B == 0]

请在以下问题中包含一些示例数据:

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))

B
的单元格值,其中
B==1
当然是
1
A[B[B==1]
因此成为
A[c(1,1,1,…)]
,并多次返回第一个单元格的值


A[B]
相当于
A[B!=0]
,因为在这种情况下
B
被视为逻辑语句,
0==FALSE
和所有其他值都是
TRUE

通常在r中,TRUE被转换为1,FALSE被转换为0。因此,可能光栅将0和1的矢量解释为假和真。
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]
B[B == 1]
# [1] 1 1 1 1 1 1 1 1 1 1