【问题标题】:Create a loop to extract data from multiple raster创建一个循环以从多个栅格中提取数据
【发布时间】:2019-12-03 20:04:47
【问题描述】:

我有 8 个栅格,我厌倦了使用一组点堆叠和提取数据。但它没有成功,因为栅格的范围不同。

我真的不擅长创建循环。如何在 R studio 中编写循环函数,我可以循环提取函数并从每个栅格中提取数据并将数据导出到表中。以下是我当前的脚本。

  H1 <- readOGR(dsn = ".", layer = "Shapefile")
  L1= raster('raster.tiff')
  L2= raster('raster.tiff')
  L3= raster('raster.tiff')
  L4= raster('raster.tiff')
  L5= raster('raster.tiff')
  L6= raster('raster.tiff')
  L7= raster('raster.tiff')
  L8= raster('raster.tiff')

   files<- list()
   files[[1]] <- L1
   files[[2]] <- L2
   files[[3]] <- L3
   files[[4]] <- L4
   files[[5]] <- L5
   files[[6]] <- L6
   files[[7]] <- L7
   files[[8]] <- L8

【问题讨论】:

    标签: r loops extract raster


    【解决方案1】:

    我假设您的意思是函数raster::extract。另外,您的示例不完整,因此我无法提供完整的解决方案。

    另外,我假设您有一组要提取的点,定义为称为coord 的矩阵。

    如果我的假设是正确的,你可以使用

    d <- lapply(files, extract, y = coord)
    

    第三个参数被转发到extract,所以你实际上是在循环

    extract(files[[1]], y = coord)
    extract(files[[2]], y = coord)
    ...
    

    您会在files 中获得一个每个元素一个元素的列表。然后你需要将它们合并在一起,例如

    library(dplyr)
    output <- bind_rows(d, .id = "raster")
    

    【讨论】:

    • 不确定这些是否应该是一个单独的问题,但有一种方法可以在提取数据时将每个栅格的文件名保留为标题。 (即在文件头中保留 L1.L2.L3 等?
    • 我不太明白。如果您使用函数dplyr::bind_rows(..., .id = "raster"),则值L1L2 等应出现在名为raster 的列中。
    • 如果您发布一个新问题,在您的问题中创建一个minimal reproducible example 会很有帮助。请参阅 this SO question 如何创建示例 raster() 以便其他人可以在他们的机器上实际运行您的代码。
    • 另外,如果lapply 对您来说是一个新功能,我强烈建议您留出一些时间来学习 R,而不是在编写代码时学习它。例如使用 Datacamp。这笔钱花得物有所值,因为它带来了回报,因为您速度更快,并且更相信您的结果是正确的。 (本人与Datacamp无关,这是基于同事的经验)
    猜你喜欢
    • 2017-07-24
    • 1970-01-01
    • 2022-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多