我有一個裝滿光柵檔案的檔案夾。它們以12個一組的形式出現,其中每個都是Sentinel 2衛星的一個波段(有12個波段)。我只是想創建一個回圈,通過該檔案夾,首先確定我感興趣的兩個波段(波段4和5)。為了從同一組照片中成對地處理它們,我試圖從波段4中提取照片的日期,然后用它來檢索同一日期的波段5。
問題來了。這些名字是這樣的。T31UER_20210722T105619_B12.jp2,但我設法只提取其中的數字,去掉了31,這樣就得到了:20190419105621042
我的問題的核心是,我如何才能只選擇這個字串的一小部分(YYY/MM/DD)?下面是這段代碼。正如你所看到的,我的方法是選擇我想洗掉的部分。但是對于第二步,即日期后面的部分一直在變化,除了042以外,它并不奏效。 非常感謝你!
for (f in files){
#Load band 4
Bande4 <-串列。 files(path="C:/Users/Perrin/Desktop/INRA/Raster/BDA/Images en vrac"/span>,
模式="B04.jp2$", full. names=TRUE)
#復制日期
x <- gsub(" [A-z //. //(/)]", ", Bande4)
y < - gsub("31"/span>。 "", x)
z <- gsub("??? 這一部分對每個檔案都有變化! ", ", Y)
#Load the matching Band 5
Bande5 <-串列。 files(path="C:/Users/Perrin/Desktop/INRA/Raster/BDA/Images en vrac"/span>,
模式= z, full.names=TRUE)
#計算NDVI
NDVI < - ((Bande5 -Bande4)/ /(Bande5-Bande4))
#Save the result
r4 <- writeRaster(z, "C。 /Users/Perrin/Desktop/INRA/Raster/BDA/Images en vrac", format="GTiff"。 覆寫=TRUE)
}
uj5u.com熱心網友回復:
你可以選擇日期,因為它是一個介于下劃線和大寫字母之間的8位數的字串(這里我假設它總是 "T")
str <- "T31UER_20210722T105619_B12.jp2"
sub("(.*_)([:digit:]]{8})(T. *)", "2", str)
#> [1] "20210722"
我把這個字串描述為一個重合詞,并且只收集它的第二部分(部分由小括號分隔)。
我希望它能與你所有的光柵相匹配!
uj5u.com熱心網友回復:
你可以使用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"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/323766.html
標籤:
上一篇:模式語法例外是如何作業的
