ESRI 'Slice' 工具的 R 版本?

R version of ESRI 'Slice' tool?

我正在寻找 ESRI 'Slice' 工具的 R 实现,特别是我想使用 'EQUAL_AREA'选项。

我想使用输入栅格,并根据(大约)每个条柱内的像元数将栅格值重新分类为 9 'bins'。

我的栅格具有 0 到 50,000 之间的值,覆盖了非常大的地理区域。因此,例如 0 到 5000 之间的值可能变为“1”,5000 到 6000 之间的值可能变为“2”,依此类推。取决于每个类别中有多少 values/cells。

谢谢。

据我所知没有这样的包,但您可以使用 classIntraster 包来完成您想要的!虽然你需要想出一个 reproducible example 来获得最好的结果,但我认为下面的脚本可以完成这项工作:

# sample data
data(volcano)
volcanoR <- raster(volcano)

# required libraries 
library(classInt)
library(raster)


n = 9 # this is number of classes
zClass <- classIntervals(values(volcanoR), n=n, style="jenks")
# chosen style: one of "fixed", "sd", "equal", "pretty", "quantile", "kmeans", "hclust",
# "bclust", "fisher", "jenks" or "dpih"


# classes for reclassification based on NBJ
df.rcl <- data.frame(zClass$brks[1:(length(zClass$brks)-1)], 
                     zClass$brks[2:(length(zClass$brks))],
                     seq(1,length(zClass$brks)-1,1))


rec.ras <- reclassify(volcanoR, df.rcl, include.lowest=TRUE)
plot(rec.ras, col=terrain.colors(n, alpha=1, rev=T), legend=F, main="NBJ")
legend("topleft", legend = c(seq(1,length(zClass$brks)-1,1)),
       fill = terrain.colors(n, alpha = 1, rev = T), cex=0.85, bty = "n")

相等间隔的相同方法类:

zClass <- classIntervals(values(volcanoR), n=n, style="equal")
# chosen style: one of "fixed", "sd", "equal", "pretty", "quantile", "kmeans", "hclust",
# "bclust", "fisher", "jenks" or "dpih"

# classes for reclassification based on EQUAL INTERVAL
df.rcl <- data.frame(zClass$brks[1:(length(zClass$brks)-1)], 
                     zClass$brks[2:(length(zClass$brks))],
                     seq(1,length(zClass$brks)-1,1))


rec.ras <- reclassify(volcanoR, df.rcl, include.lowest=TRUE)
plot(rec.ras, col=terrain.colors(n, alpha=1, rev=T), legend=F, main="Equal Interval")
legend("topleft", legend = c(seq(1,length(zClass$brks)-1,1)),
       fill = terrain.colors(n, alpha = 1, rev = T), cex=0.85, bty = "n")

library(raster)
data(volcano)
v <- raster(volcano)

对 sampleRegular 使用分位数(对于非常大的栅格)

s <- seq(0, 1, 1/9)
q <- quantile(sampleRegular(v,500000), s)
x <- cut(v, q)  # like reclassify

查看结果

plot(x)
table(values(x))
#  1   2   3   4   5   6   7   8   9 
#597 582 547 562 613 575 592 556 632