Ich verwende eine for-Schleife in R, um NetCDF-Datei aus einem Ordner zu lesen und Werte für gegebene Länge, Breite und Breite zu extrahieren. Es sieht so aus als würde es funktionieren, außer EIN PROBLEM. Wenn die Schleife Werte gegen das Datum zurückgibt, erstellt sie den 29. bis 31. Januar nach dem 28. Februar. Ich möchte wie üblich den 1. März nach dem 28. oder 29. Februar (für das Schaltjahr). Hier ist mein R-Code:Schleife durch Jahr, Monat, Tag für NetCDF-Dateiname
# given latitude, longitude list
sb1 <- data.frame(longitude=1:10,latitude =1:10)
# Extracting zonal or sub-basin average rainfall from netCDF file
sb1_r <- c()
date <- c()
rain_month <- c()
rain_year <- c()
for (year in 1998:1998){
for (month in 1:3){
for (day in seq_along(1:31)){
FileName <- paste('3B42_daily',year,sprintf("%02d",month),sprintf("%02d", day),'7.SUB.nc', sep='.')
if (!file.exists(FileName)){
next
} else {
File <- nc_open(FileName)
rain <- ncvar_get(File, 'r')
sb1_r[day] <- mean(apply(sb1,1,function(x)rain[x[1],x[2]]),na.rm = TRUE)
date[day] <- paste(year,sprintf("%02d", month),sprintf("%02d", day),sep='-')
rain_month <- data.frame(date,sb1_r)
nc_close(File)
}
}
rain_year <- rbind(rain_year,rain_month)
}
}
Sie können täglich netCDF-Daten für drei Monate auf diesen Link: https://drive.google.com/open?id=0B8rqKaYt0VEaMWVGc1gzdXI1U28
Sie haben 'für (Tag in seq_along (1.31))' für die Monate Januar, Februar und März. Aber der Februar hat nur 28 Tage. Könnte das das Problem sein? Wenn dies der Fall ist, müssen Sie die Schleife anpassen. – Gandalf
@Gandalf Aber ich habe keine NetCDF-Dateien mit dem Namen 3B42_daily.1998.02.29.7.SUB und so weiter. Um dies zu vermeiden, gebe ich "if (! File.exists (FileName)) {" in meinen Code ein. –
Nur um darauf hinzuweisen, dass die Verwendung der Mittelwertfunktion Ihnen nicht die richtige Antwort gibt, wenn Sie z. reguläres Lat/Lon-Gitter, da die Gitterzellen unterschiedlich groß sind. Daher muss der Wert in jeder Zelle durch die Zellenfläche gewichtet werden. Es ist viel besser, einfach CDO zu verwenden, was dies automatisch berücksichtigt - siehe unten. –