3

I'd like to extract values from a rasterstack, cell by cell, and create a list of the values:

ext <- extent(0,100,0,100)
r1 <- raster(nrows=100, ncols=100,ext)
r1[] <- sample(seq(from = 1, to = 6, by = 1), size = 10000, replace = TRUE)
r2 <- raster(nrows=100, ncols=100,ext)
r2[] <- sample(seq(from = 1, to = 6, by = 1), size = 10000, replace = TRUE)
r3 <- raster(nrows=100, ncols=100,ext)
r3[] <- sample(seq(from = 1, to = 6, by = 1), size = 10000, replace = TRUE)
r4 <- raster(nrows=100, ncols=100,ext)
r4[] <- sample(seq(from = 1, to = 6, by = 1), size = 10000, replace = TRUE)
s <- stack(r1,r2,r3,r4)

using extract I can create a matrix telling me the values in each layer of the stack, cell by cell:

y <- extract(s,c(1:ncell(s)))

now what I want to do is return only the unique rows of the matrix (unique(y)) with a count of how many times that row occurs.

In other words, stick a pin through every cell in a rasterstack and count how many times each 'vector' of values occurs, and also what those vectors are.

3

I think I've found the answer.

Convert to data frame and use count in the plyr package;

y <- extract(s,c(1:ncell(s)))
ydf <- as.data.frame(y)
head(ydf)
count(ydf, vars = c("layer.1","layer.2","layer.3","layer.4"))
  • 1
    There's no time wasted here. – mdsumner Dec 23 '15 at 12:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.