如何在R中获取大型栅格堆栈中每层的唯一值数量?

问题描述 投票:1回答:1

我有一个大的栅格堆栈,它代表林地斑块(63层)。我试图找到一种简洁的方法来获取每层的唯一值的数量。

对于一个栅格,我已经做了如下的处理。

r1 <- raster(matrix(sample(1:100, 20), 10,10)) #create mock data
length(unique(r1)) #gives number of unique values 

但如果我有一叠3个栅格,如下图所示,是否有一种简明的方法来获取每层的信息。

### mock data
r1 <- raster(matrix(sample(1:100, 20), 10,10))
r2 <- raster(matrix(sample(1:100, 50), 10,10))
r3 <- raster(matrix(sample(1:100, 10), 10,10))
### create raster stack
allrasters <- stack(r1, r2, 23)
r stack gis raster
1个回答
2
投票

你可以使用 freq 里面 raster 包来获取每层像素的频率值,然后只需用 nrow. 最后,你可以将数据从列表转换为data.frame,以便于进一步计算时调用它。

library(raster)
as.data.frame(lapply(freq(allrasters), function(x) nrow(x)))

#    layer.1 layer.2 layer.3
# 1       20      50      10

1
投票

示例数据

library(raster)
set.seed(1)
r1 <- raster(matrix(sample(1:100, 20), 10,10))
r2 <- raster(matrix(sample(1:100, 50), 10,10))
r3 <- raster(matrix(sample(1:100, 10), 10,10))
s <- stack(r1, r2, r3)

解决方案1:首先得到 独特的组合 的值,然后按层的独特值

u <- unique(s) 
x <- lapply(u, unique)
sapply(x, length)

解决方案2:像这样在各层上循环

y <- sapply(1:nlayers(s), function(i) unique(s[[i]]))
sapply(y, length)

解决方案3:Jonathan V. Solórzano的建议。

sapply(1:nlayers(s), function(i) NROW(freq(s[[i]])))
#[1] 20 50 10

0
投票

一种方法可能是投射到一个3D阵列中,并使用 apply:

library(raster)
set.seed(1)
r1 <- raster(matrix(sample(1:100, 20), 10,10))
r2 <- raster(matrix(sample(1:100, 50), 10,10))
r3 <- raster(matrix(sample(1:100, 10), 10,10))
allrasters <- stack(r1, r2, r3)
apply(as.array(allrasters),3,function(x)length(unique(as.vector(x))))
[1] 20 50 10

这不一定是你要问的问题,但是如果你遇到了这个问题,你也可以使用 apply.

apply(as.array(allrasters),c(1,2),function(x)length(unique(x)))
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    3    3    3    3    3    3    3    3    3     3
 [2,]    3    3    3    3    3    3    3    3    3     3
 [3,]    3    2    3    3    3    3    2    3    3     3
 [4,]    3    3    3    2    3    3    3    3    2     3
 [5,]    3    3    3    3    3    3    3    3    3     3
 [6,]    3    3    3    3    3    3    3    3    3     3
 [7,]    3    3    3    3    3    3    3    3    3     3
 [8,]    3    3    3    3    3    3    3    3    3     3
 [9,]    3    3    3    3    3    3    3    3    3     3
[10,]    3    3    3    3    3    3    3    3    3     3
© www.soinside.com 2019 - 2024. All rights reserved.