我有不同年份的分类栅格(2003,2004,2005,比如说r1,r2,r3)。 Tha栅格类及其比例在几年内变化。
我想从我的栅格列表中创建一个数据框。数据框应包含栅格指示(年/ r1 ..),以及每个栅格类的像素数。
我知道我可以通过table(values(r))
获得每个类的像素值计数。如何在单个数据框中将每个栅格中的tables
放在一起?
示例:
library(raster)
# create raster
r1<-raster(ncol= 3, nrow = 3)
values(r1)<-rep(c(1:3), 3)
# create more rasters, assign classes
r2<-r1+1
r3<-r1
values(r3)<-c(1,1,1,2,2,2,1,1,1)
# create raster list
r<-list(r1,r2,r3)
# get count of pixel values
table(values(r[[1]]))
table(values(r[[2]]))
table(values(r[[3]]))
# expected to obtain:
raster class count
r1 1 3
r1 2 3
r1 3 3
r2 2 3
r2 3 3
r2 4 3
r3 1 6
r3 2 3
答案 0 :(得分:3)
通过tidyverse的另一个类似的解决方案:
library(tidyverse)
df <- bind_rows(
r1 = as_data_frame(table(values(r[[1]])))
, r2 = as_data_frame(table(values(r[[2]])))
, r3 = as_data_frame(table(values(r[[3]])))
, .id = "raster"
) %>%
# because I assume you want integers instead of strings
mutate( class = as.integer(Var1) ) %>%
select(raster, class, count = n)
答案 1 :(得分:2)
您可以尝试使用列表r:
获得所需的结果lst <- lapply(r, function(x) as.data.frame(table(values(x))))
df <- cbind.data.frame(raster=paste0('r', rep(1:length(r), sapply(lst, nrow))),
do.call(rbind, lst))
names(df)[2:3] <- c('class', 'count')
df
raster class count
1 r1 1 3
2 r1 2 3
3 r1 3 3
4 r2 2 3
5 r2 3 3
6 r2 4 3
7 r3 1 6
8 r3 2 3