如何使用 terra 包在 freq 函数的输出中添加图层名称?
How to add layer name in the output of freq function using terra package?
我想使用 terra
r 包在 freq
函数的输出中添加层名称来代替层编号。这是一个可重现的例子
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
从输出可以看出layer代表层数。现在如何使用 terra 包在 freq
函数的输出中添加图层名称?
示例数据
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)
我想使用 terra
r 包在 freq
函数的输出中添加层名称来代替层编号。这是一个可重现的例子
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
从输出可以看出layer代表层数。现在如何使用 terra 包在 freq
函数的输出中添加图层名称?
示例数据
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)