1

我想在使用r 包的freq函数输出中添加层名称来代替层号。terra这是一个可重现的示例

library(terra)

# first create a raster
r1 <- r2 <- r3 <- rast(nrow=10, ncol=10)
# Assign random cell values
values(r1) <- runif(ncell(r1))
values(r2) <- runif(ncell(r2))
values(r3) <- runif(ncell(r3))
s <- c(r1, r2, r3)
names(s) <- c("a", "b", "c")
# classify the values into four groups
m <- c(0, 0.1, 1,
       0.1, 0.3, 2,
       0.3, 0.6, 3,
       0.6, 1, 4)

#Reclassify the raster stack
rclmat <- matrix(m, ncol=3, byrow=TRUE)
rc1 <- classify(s, rclmat, include.lowest=TRUE)

#Calculate frequency of pixels under each class
(f <- freq(rc1))

#>     layer value count
#> [1,]     1     1     5
#> [2,]     1     2    24
#> [3,]     1     3    32
#> [4,]     1     4    39
#> [5,]     2     1     9
#> [6,]     2     2    27
#> [7,]     2     3    32
#> [8,]     2     4    32
#> [9,]     3     1     6
#> [10,]     3     2    20
#> [11,]     3     3    34
#> [12,]     3     4    40

从输出层可以看出,代表层数。现在如何freq使用 terra 包在函数的输出中添加图层名称?

4

1 回答 1

2

示例数据

library(terra)
r <- rast(nrows=10, ncols=10)
set.seed(2)
values(r) <- sample(5, ncell(r), replace=TRUE)
x <- c(r, r/3)
names(x) <- c("a", "b")

解决方案

f <- freq(x)
f <- data.frame(f)
f$layer <- names(x)[f$layer]
f
#  layer value count
#1     a     1    27
#2     a     2    15
#3     a     3    17
#4     a     4    17
#5     a     5    24
#6     b     0    27
#7     b     1    49
#8     b     2    24
 

您也可以一步获得相同的结果

freq(x, usenames=TRUE)
于 2021-08-26T10:24:06.717 回答