ich hatte letzte Woche schon einmal ein paar Code-Zeilen geschrieben (Betreff: Messdaten auf Rasterfile interpolieren). Den Ansatz habe ich jetzt verworfen und ich konzentrierte mich auf das Vergleichen der Messwerte mit dem nächstgelegenen Modellwert.
Ich schildere kurz das "Problem". Ich habe ein data.frame mit Messwerten (long, lat, Messwert, Station, ...) und ein modelliertes Dichte-Feld. Den Messwert und den Modellwert möchte ich jetzt miteinander vergleichen. Dazu habe ich mir den zur Station nächstgelegenen Gitterpunkt gesucht und die Werte einander zugeordnet. Soweit so gut. Allerdings habe ich das jetzt mal nur für einen Tag gemacht, ich habe den Messdatensatz mit subset so eingegrenzt, dass nur Werte mit der jeweiligen Bedingung in die Zuordnung eingingen. Ich habe aber Messwerte (Tagesmittelwerte) von insgesamt vier Monaten, also etwa 120 Tage/Werte. Mein Plan wäre, da ja der Modellwert unabhängig vom Tag ist, und somit am Gitterpunkt immer den gleichen Wert hat, einen Plot/Zeitreihe zu erstellen, wie die tatsächlichen Messwerte um den Modellgitterpunkt variieren. Dazu benötige ich natürlich alle Tagesmittelwerte.
Mein Problem ist jetzt, dass , wenn ich alle Messwerte zulasse (also keine Eingrenzung mehr auf einen Tag), der Durchlauf der Schleife ewig dauert.
Ich zeige euch meinen Code(Ansatz), vermutlich nicht besonders elegant ...
Code: Alles auswählen
library(sp)
library(raster)
s <- read.csv("test_r_for.csv", header = TRUE, sep = ";", dec = ",")
## vorerst Einschränkung auf einen Tag
s_at <- subset(s, s$Tag == 15 & s$Monat == 3)
station <- data.frame(s_at$Laenge, s_at$Breite, s_at$Tagesmittel)
colnames(station) <- c("longitude", "latitude", "Mittel")
r <- raster("dichte.tif")
r_coord <- rasterToPoints(r)
r_coord_df <- as.data.frame(r_coord)
colnames(r_coord_df) <- c("longitude", "latitude", "Dichte")
## wandle die Input-Koordinaten in SpatialPointsDataFrames um
coordinates(station) <- c("longitude", "latitude")
coordinates(r_coord_df) <- c("longitude", "latitude")
closestSiteVec <- vector(mode = "numeric",length = nrow(station))
minDistVec <- vector(mode = "numeric",length = nrow(station))
for (i in 1 : nrow(station))
{
distVec <- spDistsN1(r_coord_df,station[i,],longlat = TRUE)
minDistVec[i] <- min(distVec)
closestSiteVec[i] <- which.min(distVec)
}
dichte_modell <- as(r_coord_df[closestSiteVec,]$Dichte,"numeric")
df_zuordnung_messung_modell = data.frame(coordinates(station),station$Mittel,
closestSiteVec,round(minDistVec,4),dichte_modell)
colnames(df_zuordnung_messung_modell) <- c("Laenge", "Breite", "Mittelwert", "Index_nächster_GP", "Entfernung", "Dichte_Modell")
Gibt es hier eine Möglichkeit, den Code zu beschleunigen, oder muss ich die Zeit einfach abwarten?
Danke schon einmal für eure Hilfe.
Grüße
Jess