Извлечение из числовой строки только некоторых цифр

#r #regex #gis #raster #sentinelsat

Вопрос:

У меня есть папка, полная растровых файлов. Они прибывают группой из 12 человек, где каждый из них является полосой (всего 12 полос) спутникового дозорного 2. Я просто хочу создать цикл, который проходит через папку, и сначала определить две группы, которые меня интересуют (группа 4 и группа 5). Чтобы обработать их попарно из одного и того же набора, я пытаюсь извлечь из полосы 4 дату фотографии в строке, которую я буду использовать для извлечения полосы 5 с той же даты;

Вот тут и возникает проблема. Имена такие : T31UER_20210722T105619_B12.jp2, но мне удается извлечь из него только числа и избавиться от 31, и это дает мне : 20190419105621042

Суть моего вопроса в том, как я могу выбрать только небольшую часть (ГГГГ/ММ/ДД) этой строки ?

вот фрагмент кода. Как вы можете видеть, мой метод состоит в том, чтобы выбрать часть, которую я хочу удалить. Но это не работает для второго шага, когда часть, приходящая после даты, все время меняется, за исключением 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)
  
}
 

Ответ №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"
 

Комментарии:

1. Я думаю, что это сработало для меня ! Жаль, что я не нашел эту функцию раньше.

Ответ №2:

вы можете выбрать дату, потому что это строка длиной 8 цифр между подчеркиванием и заглавной буквой (здесь я предполагаю, что это всегда «Т»).

 str <- "T31UER_20210722T105619_B12.jp2"

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

Я описываю строку как регулярное выражение и собираю только вторую ее часть (части, разделенные круглыми скобками).

Я надеюсь, что он будет соответствовать всем вашим растровым изображениям !