在R中使用给定条件内的值进行光栅缓冲

在R中使用给定条件内的值进行光栅缓冲,r,filter,buffer,raster,threshold,R,Filter,Buffer,Raster,Threshold,我有一个光栅文件,其中包含温度值和坐标点列表,作为所需缓冲区的中心,颜色为红色,如图所示: 如何提取质心周围的缓冲区,该质心包含与条件匹配的所有相邻单元Tmax=Tcentroid+6ºC? 此外,我还希望重叠缓冲区,如果它们相交,则将它们合并为一个缓冲区。这里有一种方法。通过gdistance包中的函数可能有一种更有效的方法来实现这一点 示例数据: library(raster) r <- raster(ncol=36, nrow=18) r[] <- 1:ncell(r) xy

我有一个光栅文件,其中包含温度值和坐标点列表,作为所需缓冲区的中心,颜色为红色,如图所示:

如何提取质心周围的缓冲区,该质心包含与条件匹配的所有相邻单元
Tmax=Tcentroid+6ºC

此外,我还希望重叠缓冲区,如果它们相交,则将它们合并为一个缓冲区。

这里有一种方法。通过
gdistance
包中的函数可能有一种更有效的方法来实现这一点

示例数据:

library(raster)
r <- raster(ncol=36, nrow=18)
r[] <- 1:ncell(r)
xy <- cbind(-55, seq(-25, 20, by=20))
库(光栅)

r是否要获取特定缓冲区中与条件匹配的值(获取缓冲区中的所有值,删除不匹配的值并删除空间重复项);或者条件是否应该决定缓冲区大小(条件是否为缓冲区;哪一个看起来更复杂)?另外,请设置一个可复制的示例。我希望缓冲区中的值与条件匹配。在所附的图片中,我试图举例说明缓冲区中的单元格小于或等于6的情况。[1] 当前位置谢谢你的回答,但我意识到我没有正确解释我需要什么。据我从您的回答中了解,缓冲区包含所有光栅值,并从中心点查找与条件匹配的值。我真正需要的是从中心开始观察那些相邻且符合条件的值。一旦发现第一个值与条件不匹配,我想停止在该方向上查找相邻值。这意味着条件决定了缓冲区的大小
start <- cellFromXY(r, xy)
svalues <- extract(r, xy)

result <- list()
for (i in 1:nrow(xy)) {
    value <- svalues[i]
    cells <- start[i]
    allcells <- cells
    while(TRUE) {
        adj <- adjacent(r, cells, pairs=FALSE)
        asel <- which(abs(r[adj] - value) < 5)
        if (length(asel) == 0) break
        cells <- adj[asel]
        cells <- cells[!cells %in% allcells]
        allcells <- c(allcells, cells)
    }
    result[[i]] <- allcells
}
p <- xyFromCell(r, unlist(result))   
plot(r)
points(xy, pch=20)
points(p, pch='+')