Mer

Behandler store mengder Rasters i R


Jeg har 6500 bearbeidede og klippte raster som daglig indikerer snønivå på den nordlige halvkule. Jeg må lage en raster som representerer en sum av snøen for sesongen. Vintersesongen vil da gå fra september 1999 til mars 2000. Jeg lurte bare på hvordan jeg skulle gå frem for å tilbakekalle daglige rastere til R ved hjelp av sløyfe -funksjonen/ hvordan jeg skulle gå frem for å beregne sesongbeløpene. Husk at rasterne strekker seg over to forskjellige år, og at jeg ikke vil inkludere alle snødata fra 1999 fordi det også vil inkludere forrige vinter (98/99).


Indekser hver dag med sitt år og juliansk dag. 1. september er 244, 31. mars er 90. Uten å vite formatet på filene dine, kan du sannsynligvis finne ut et datoformat du kan bruke til å analysere og gjøre det til en POSIX -dato (fra https://stackoverflow.com/questions/21414847 /convert-a-date-vector-into-julian-day-in-r):

tmp <- as.POSIXlt ("16Jun10", format = "%d%b%y") tmp $ yday

Forutsatt at du har hentet datoene dine fra filnavn:

tmp <- as.POSIXlt (myFormattedDates, format = "%d%b%y") julianDay <- tmp $ yday

For å bestemme vinteråret for hver fil, ta år og julian dag som et 7-sifret tall (f.eks. 1. september 1998 er 1998244 og 31. mars 1999 er 1999090), trekk fra 91, divider med 1000 og ta gulvet:

vinterår <- etasje (((år*1000+julianDay) -91)/1000)

dette forutsetter at du har tre vektorer med samme lengde, tilsvarende de samme rastrene:

  1. en vektorårsom inneholder året for alle filene
  2. en vektorjulianDagsom inneholder den juliske dagen for alle filene
  3. en vektorrasterNamesmed stiene til alle rasterne.

Deretter kan du velge filene basert på det gitte året:

for (year in unique (winterYear)) {winterSumRaster <- NULL thisWinterRasterNames <- rasterNames [which (winterYear == year)] for (winterRasterName in thisWinterRasterNames) {dailyRaster <- raster (winterRasterName) if (is.null (winterSumRaster)) {winterSumRaster <- raster (dailyRaster) setValues ​​(winterSumRaster, getValues ​​(dailyRaster))} else {setValues ​​(winterSumRaster, getValues ​​(dailyRaster)+getValues ​​(winterSumRaster))}} writeRaster (winterSumRaster, paste0 ("winterSum", år ",". grd "))}}

Du kan selvfølgelig lagre rasteren i andre formater, men .grd krever ikke noe spesielt somgdal.


Se videoen: КУРСЕД НА ЛЕСНОМ ТЕЧИСЕ С 3К БОГАМИ. КУРСЕД TECHIES (Oktober 2021).