在R中使用名称重新分类多个光栅的值

在R中使用名称重新分类多个光栅的值,r,raster,R,Raster,我试图用R对几个光栅文件进行重新分类。 “我的光栅文件”包含物种范围以及出现的单元格中的总范围值。其他单元格有NoData。这些文件的等级为名称1,2,3。。。。 现在我尝试重新分类细胞的值,其中物种以等级出现。 我尝试了循环重新分类功能,但没有成功。。。 提前谢谢 假设您有一个光栅表示单个物种的存在/不存在。你也知道这个特定物种出现的面积和范围。对于这个物种存在的每个细胞,你们已经用总出现次数填充了它 假设400个细胞中有50个检测到这种物种 物种出现在50个随机细胞上 e1 <- ex

我试图用R对几个光栅文件进行重新分类。 “我的光栅文件”包含物种范围以及出现的单元格中的总范围值。其他单元格有NoData。这些文件的等级为名称1,2,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)
但你们可以将这个光栅层作为一个图像文件,存储在你们的磁盘上,并以物种的等级命名

有几种方法可以替换光栅层中的值。如果此特定物种的等级为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)

您将获得一个带有重新分类光栅层的光栅堆栈对象。您可以取消堆叠、导出、操作…

请提供。用户3327377您应该尽可能按照@Thomas提供的示例更好地描述您的问题。如果您认为这可能很困难,请提供一个明确的示例。描述一个光栅文件,你所说的总范围是什么意思?每个光栅都描述了单个物种的存在/不存在?就你的问题而言,排名意味着什么?等级可以解释为单一物种代码吗?你假设得很好。一个光栅表示一个物种在全世界的分布情况。在物种出现的细胞中,我有这个物种总范围的值。假设一个物种出现在100个1km^2的细胞中,它在每个细胞中的值为100。如果该物种是最小范围大小的物种,则其名称为1。因为它的排名是1。我知道我想把它的名字从1改为100。我认为您提供的脚本是perfekt,但我发现其中有一个小错误:as.listx中的错误:缺少参数x,没有默认值它指的是堆栈函数,我想我必须写:stklAh,对不起!我的电脑以前崩溃了,我没有加载软件包…非常感谢你的帮助,它工作了perfectly@user3327377很高兴知道。如果答案有用,请投票表决。