【问题标题】:Extracting from numerical string only some digits从数字字符串中仅提取一些数字
【发布时间】:2021-11-14 00:05:43
【问题描述】:

我有一个充满光栅文件的文件夹。它们由 12 个一组来,其中每个都是卫星 Sentinel 2 的一个频段(有 12 个频段)。我只是想创建一个遍历文件夹的循环,并首先确定我感兴趣的两个频段(带 4 和 5)。为了从同一个集合中成对处理它们,我试图从第 4 波段中提取字符串中照片的日期,我将用它来从同一日期检索第 5 波段;

问题来了。名称是这样的:T31UER_20210722T105619_B12.jp2,但我设法只从中提取数字并去掉 31,这给了我:20190419105621042

我的问题的核心是,我怎样才能只选择这个字符串的一小部分(YYYY/MM/DD)?

这是一段代码。如您所见,我的方法是选择我要删除的部分。但它不适用于第二步,即日期之后的部分一直在变化,但 042 除外。 非常感谢!

for (f in files){
  #Load band 4
  Bande4 <- list.files(path="C:/Users/Perrin/Desktop/INRA/Raster/BDA/Images en vrac", 
                       pattern ="B04.jp2$", full.names=TRUE)
  #Copy the date
  x <- gsub("[A-z //.//(//)]", "", Bande4)
  y <- gsub("31", "", x)
  z <- gsub("??? this part changes for every file!", "", y)

  #Load the matching Band 5
  Bande5 <- list.files(path="C:/Users/Perrin/Desktop/INRA/Raster/BDA/Images en vrac", 
                       pattern = z, full.names=TRUE)
  #Calculate NDVI
  NDVI <- ((Bande5 - Bande4)/(Bande5- Bande4))

  #Save the result
  r4 <- writeRaster(z, "C:/Users/Perrin/Desktop/INRA/Raster/BDA/Images en vrac", format="GTiff", overwrite=TRUE)
  
}

【问题讨论】:

    标签: r regex gis raster sentinelsat


    【解决方案1】:

    您可以使用substr从字符串中提取某些字符,例如:

    substr(z, 1, 8)
    [1] "20210722"
    

    如果你的名字总是相同的格式,你可以直接使用substr,不用gsub先:

    substr(Bande4, 8, 15)
    # e.g. with
    substr("T31UER_20210722T105619_B12.jp2", 8, 15)
    [1] "20210722"
    

    【讨论】:

    • 我认为它对我有用!可惜我之前没有找到这个功能。
    【解决方案2】:

    您可以选择日期,因为它是一个介于和下划线和大写字母之间的 8 位长字符串(这里我假设它始终是“T”)

    str <- "T31UER_20210722T105619_B12.jp2"
    
    sub("(.*_)([[:digit:]]{8})(T.*)", "\\2", str)
    #> [1] "20210722"
    

    我将字符串描述为一个正则表达式,并且只收集它的第二部分(部分由括号分隔)。

    我希望它能匹配你所有的光栅!

    【讨论】:

      猜你喜欢
      • 2021-07-18
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 2015-10-04
      • 2021-01-08
      • 1970-01-01
      相关资源
      最近更新 更多