我正在尝试用R重新分类几个光栅文件 我的栅格文件包含物种范围,其中包含发生的单元格中的总范围值。其他单元格有NoData。这些文件的名称为(1,2,3 ......)。 现在我尝试用Rank来重新分类物种出现的细胞的值。 我试着循环重新分类功能但没有成功... 提前谢谢!
答案 0 :(得分:3)
假设您有一个栅格代表单个物种的存在/不存在。您还知道该特定物种的面积范围和范围(表示为出现次数)。对于存在该物种的每个细胞,您已经填充了总物种数。
让我们说这个物种是在400个细胞中的50个中检测到的。
通过在50个随机细胞上存在表达的物种出现。
e1 <- extent(0,10,0,10)
r1 <- raster(extent(0,10,0,10))
res(r1) <- 0.5
r1[1:ncell(r1)] <- NA
r1[sample(ncell(r1), 50, rep = F)] <- 50
plot(r1)
但是你可能将这个rasterLayer作为一个图像文件,存储在你的磁盘上并以该物种的等级命名。
有几种方法可以替换rasterLayer中的值。如果对于此特定物种,等级为1,则可以按等级替换范围
r1[!is.na(r1)] <- 1
如果你想翻看文件夹,试试这个:
wdata <- '.../R/Stackoverflow/21876858' # your local folder
f.reclass <- function(x=x){
files <- list.files(file.path(wdata), all.files = F) # list all files from a given driver folder
# Assuming TIF images, List files from wdata folder
## Change below if using any other format
ltif <- grep(".tif$", files, ignore.case = TRUE, value = TRUE)
stkl <- stack()
for(i in 1:length(ltif)){
x <- raster(file.path(wdata, ltif[i]),
package = "raster", varname = fname)
rank <- as.numeric(sub("*.tif", "", ltif[i]))
# Change also here if not tif
stopifnot(is.numeric(rank)) # check for numeric
x[!is.na(x)] <- rank
stkl <- addLayer(stkl, x)
}
stkl
}
spreclass <- f.reclass(x=x)
您将获得带有重新分类的rasterLayers的rasterStack对象。你可以将它们拆开,导出,操纵......