Replace a random sample of elements in a matrix that contain a certain value


You want to replace values within a matrix with another value, but only at a random sample of locations where the original value occurs.



The following code will find the index of all locations in the matrix that have a given value, then assign a new value to a random sample of those index locations.


#Create an example matrix
MTX <- matrix(1:5, nrow=5, ncol=5)
#View the matrix
#Find the index of all locations where MTX==2,
#and assign a new value of 888 to a random sample of 3 of those
MTX[sample(which(MTX %in% 2), 3, replace=FALSE)] <- 888
#View the result
#Note that this can be adapted for use with raster data,
#but doesn't appear to work as-is on rasters
#Use the following to turn your raster into a matrix:
    #MyMatrix <- matrix(getValues(MyRaster))


Jason Carlisle contributed to the development of this tool.