【问题标题】:How to extract and calculate the mean for certain region form rasters?如何提取和计算某些区域形式栅格的平均值?
【发布时间】:2013-03-20 11:07:38
【问题描述】:

我想在第一个栅格中选择小区域并计算该区域的空间平均值,并对其他 11 个栅格执行相同的操作。所以最终会得到 12 个值。

我试过了:

sami<- list.files("C:\\New folder (3)", "*.envi", full.names = TRUE)
saf=stack(sami)
plot(saf, 1)   ## to select a region
e <- drawExtent()## I selected the region
saf_test <- crop(saf, e)

这样做是否正确?

然后我如何计算所选区域的空间平均值?并对所有其他栅格执行相同的操作。 提前致谢。

【问题讨论】:

  • 请让您的情况可重现,即向我们提供模拟您的情况所需的数据和代码。有关如何执行此操作的更多提示,请参阅stackoverflow.com/questions/5963269/…
  • 您在栅格库中尝试过分区统计吗? zonal(x, z, stat='mean', digits=0, na.rm=TRUE, ...)
  • stackApply 怎么样 你可以使用extent 来选择区域。这将使它更具可重复性(从长远来看更容易)。您可以查看栅格小插图,了解有关如何生成一些示例数据以使您的问题可重现的一些提示。
  • @ZadSim 你的真实数据并不重要,而只是一个代码 r
  • @ZadSim 为了停止对你的问题投反对票(我不认为你一直在问 问题),你需要专注于让你的问题像 Paul 一样可重复上面指出。简单地添加指向您的数据的链接是不够的 - 它迫使人们手动下载它。最好创建一些代码和虚拟数据,以便在 R 中重新创建您的问题,以便人们可以从您的问题中复制粘贴代码并进行开发。检查您正在使用的包的文档,通常有一些示例数据或创建示例数据的方法(尤其是在优秀的光栅包中)。

标签: r raster


【解决方案1】:

你可以这样做。我使用了来自raster 包的一些示例数据。尝试一下并将其适应您的栅格堆栈(这应该很容易)。 extract 函数将返回一个矩阵。 drawExtent为每一层选择的区域的一列值,然后您可以使用colMeans作为该区域的平均值:

    #This particular stack has 3 'layers' - one each for the red, green and blue channels of the picture
    saf <- stack(system.file("external/rlogo.grd", package="raster")) 
    plotRGB( saf )
    e <- drawExtent()

    vals <- extract( saf , e , nl = nlayers( saf ) )
    vals <- colMeans( vals )
    vals
#   red    green     blue 
#   185.9368 191.9158 208.7825 

【讨论】:

  • 您可以手动创建一个extent对象。如果您绘制范围,然后在控制台中输入e(或您称之为范围的任何内容),它将显示您的范围的值。现在,在您的代码中使用这些值来创建一个像这样的范围...e &lt;- extent(xmin, xmax, ymin, ymax) 按指定顺序输入正确的值。这有意义吗?
  • @ZadSim 好悲伤,总是有更多的问题,仍然没有接受或赞成?! plot( saf ) , plot( e , add = TRUE )
  • @ZadSim 谢谢! :-),还可以获得您可能想要做的范围的确切值 e &lt;- drawExtent() ,然后是 paste( e@xmin )paste( e@xmax ) 等。
  • @ZadSim 错误是什么?那应该行得通。也许你有一些列都是 NA?
  • 您确定您是在矩阵上运行 colMeans,而不是在先前计算的 colMeans 上运行?!!如果您输入vals,您会得到矩阵还是值向量?尝试将代码更改为 vals &lt;- extract(...)valMean &lt;- colMeans(...) 以避免任何混淆并从头开始再次运行!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-02
  • 2016-03-20
相关资源
最近更新 更多