dataframe - Extracting pixels from a raster based on specific value of another raster using R -
i imported 2 rasters (raster a , b)in r using raster function. extract pixels of a b equals 1 data frame. trying following, however, pixels obtain have same values, although various in original dataset.
the 2 rasters have same dimensions (ncols, nrows, ncell, resolution, extent, projection).
library(raster) library(rgdal) # import inputs <- raster('/pat/to/rastera.tif') b <- raster('/pat/to/rasterb.tif') # extract raster values on raster b b == 1 mydata <- data.frame(a[b[b == 1]]) edit 1
might when a[b[b == 1]], class of object , b rasterlayer becomes numeric, , creates problems? discovered doing class(a[b[b == 1]]), gives numeric.
edit 2
ok, weird. tried mydata <- data.frame(a[b]) , output has original a @ b == 1 locations. trying before extracted pixels a (as expect). can coinfirm right counting number of ones in b , number of elements in mydata, same. it's if indexing has skipped zeros in b. can explain this?
please include example data in questions this:
library(raster) r <- raster(nrow=5, ncol=5, xmn=0, xmx=1, ymn=0, ymx=1) set.seed(1010) <- setvalues(r, sample(0:5, ncell(r), replace=true)) b <- setvalues(r, sample(0:2, ncell(r), replace=true)) now can do:
s <- stack(a,b) v <- as.data.frame(s) v[v[,2] == 1, 1] alternatively
a[b==1] or
d <- overlay(a, b, fun=function(x,y){ x[y!=0] <- na; x}) na.omit(values(d)) or
xy <- rastertopoints(b, function(x) x == 1) extract(a, xy[,1:2]) or
a[b!=1] <- na rastertopoints(a)[, 3] etc...
now why this: a[b[b == 1]] not work? unpack it:
b[b == 1] # [1] 1 1 1 1 1 1 1 1 1 1 the cell values of b b==1 are, of course, 1. a[b[b == 1]] becomes a[c(1,1,1,..)], , returns value of first cell many times.
a[b] equivalent a[b!=0] b considered logical statement in case, , 0 == false , other values true
Comments
Post a Comment