anackr
anackr

Reputation: 13

Raster reclassify generating wrong values

I am trying to reclassify a raster object of altitude, in order for values >= 2300 to become 1 and < 2300 to become 0. (the object is Worldclim elevation 30s) I tried it on QGIS Raster calculator

"wc2.1_30s_elev@1" >= 2300

and the map it yielded was strange (strange negative numbers, and no apparent differentiation between > or < 2300. However, when I manually customized the labels to be 0 or 1, the map appeared to be correct. Also, the "Identify features" tool showed the correct values. But when I used this layer for an operation in Raster Calculator (my next step), the resulting layer showed the same problems.

So, I tried to do it in R. At first I tried

r[r < 2300] <- 0
r[r >= 2300] <- 1

But the same problem came up. So I tried raster::reclassify

reclass_df <- c(0, 2300, 0,
            2301, 6651, 1)
reclass <- matrix(reclass_df,
                ncol = 3,
                byrow = TRUE)

r_reclassif <- reclassify(r, reclass)

And the strange values were not there anymore, but still the map showed no apparent differentiation between > or < 2300.

At first, it was only a visual problem. Plotting with a specified sequence of breaks seemed to do the task.

plot(r, col = color_palette, breaks = seq(0, 0.0109, length.out = 101))

But I need to do another step: a terra::xyFromCell using the raster as a probability argument. Then, the strange values and lack of discrimination between altitudes become a problem.

Could somebody help? I have no idea what's going on.

Upvotes: 0

Views: 82

Answers (1)

Robert Hijmans
Robert Hijmans

Reputation: 47481

Example data

library(terra)
r <- rast(system.file("ex/elev.tif", package="terra"))

Which areas are higher than 400m? All you have to do is

x <- r > 400
plot(x)

Note that TRUE is equivalent to 1 and FALSE is equivalent to 0.

Alternatively, you can do

y <- classify(r, rbind(c(-Inf, 400, 0), c(400, Inf, 1)))

# or 

z <- ifel(r < 400, 0, 1)

I note that in your use of raster::reclassify, you assume that zero is the lowest possible elevation. That is not correct.

Upvotes: 1

Related Questions