Substitute values in a Raster* object
subs.RdSubstitute (replace) values in a Raster* object with values in a data.frame. The data.frame should have a column to identify the key (ID) to match with the cell values of the Raster* object, and one or more columns with replacement values. By default these are the first and second column but you can specify other columns with arguments by and which. It is possible to match one table to multiple layers, or to use multiple layers as a single key, but not both.
Usage
# S4 method for class 'Raster,data.frame'
subs(x, y, by=1, which=2, subsWithNA=TRUE, filename='', ...)Arguments
- x
Raster* object
- y
data.frame
- by
column number(s) or name(s) identifying the key (ID) to match rows in data.frame
yto values of the Raster object- which
column number or name that has the new (replacement) values
- subsWithNA
logical. If
TRUEvalues that are not matched become NA. IfFALSE, they retain their original value (which could also beNA). This latter option is handy when you want to replace only one or a few values. It cannot be used whenxhas multiple layers- filename
character. Optional output filename
- ...
additional arguments as for
writeRaster
Details
You could obtain the same result with reclassify, but subs is more efficient for simple replacement. Use reclassify if you want to replace ranges of values with new values.
You can also replace values using a fitted model. E.g. fit a model to glm or loess and then call predict
Examples
r <- raster(ncol=10, nrow=10)
values(r) <- round(runif(ncell(r)) * 10)
df <- data.frame(id=2:8, v=c(10,10,11,11,12:14))
x <- subs(r, df)
x2 <- subs(r, df, subsWithNA=FALSE)
df$v2 <- df$v * 10
x3 <- subs(r, df, which=2:3)
s <- stack(r, r*3)
names(s) <- c('first', 'second')
x4 <- subs(s, df)
x5 <- subs(s, df, which=2:3)