for-Schleife und NA-Werte bei min & max
Verfasst: Do Apr 25, 2019 11:59 am
Liebes Forum,
ich versuche gerade mir aus den Messwerten von 672 Stationen die Parameter min und max und die Anzahl der Fehlwerte ausgeben zu lassen.
Die Variable "tagesmittel" enthält mitunter den Stationsnamen, den Tagesmittelwert (inkl. NA) und den relativen Anteil der Fehlwerte. Um eine besseren Überblick zu bekommen, dachte ich, ich bastle mir ein Data.frame (später dann auch als csv) mit den Informationen Stationsname, Minimum des Tagesmittelwertes und Maximum und den Anteil an Fehlwerten. Insgesamt sind Tagesmittelwerte an 122 Tagen und bei 672 Stationen. Mein Versuch mit der for-Schleife klappt, allerdings nur bedingt und ich komme nicht drauf, wo der Fehler liegen könnte.
Der Output sieht so aus:
Da bei den meisten Stationen NA-Werte auftreten, habe ich den min- und max-Befehl mit dem Zusatz na.rm = T versehen und außerhalb der Schleife funktioniert das auch, innerhalb der Schleife wird bei den Minimum- und Maximum-Werte NA eingesetzt, wenn fw (= Fehlwert) ungleich Null ist. Und was ich auch nicht verstehe ist, dass die Schleife nicht alle Stationen durchläuft, sondern bei 122 aufhört, wobei die min- und max-Werte sowie der Fehlwert bei allen 672 Stationen zu funktionierten scheint. Lediglich bei er Zuordnung der Stationsnamen scheint etwas nicht zu stimmen.
Ich habe ein stark verkürztes csv.File mit einigen Testdaten angehängt.
Danke für eure Hilfe.
Grüße
Jessi
ich versuche gerade mir aus den Messwerten von 672 Stationen die Parameter min und max und die Anzahl der Fehlwerte ausgeben zu lassen.
Code: Alles auswählen
str(tagesmittel)
Classes ‘data.table’ and 'data.frame': 81984 obs. of 7 variables:
$ Codename : chr "ANDO" "ANDO" "ANDO" "ANDO" ...
$ dm : int 101 201 301 401 501 601 701 801 901 1001 ...
$ Tagesmittel : num -0.6 -0.8 -0.7 -0.7 -0.3 0.3 -0.2 0.7 1.3 2.9 ...
$ Tag : num 1 2 3 4 5 6 7 8 9 10 ...
$ Monat : num 1 1 1 1 1 1 1 1 1 1 ...
$ TagMon : chr "01-01" "02-01" "03-01" "04-01" ...
$ fw: num 19.7 19.7 19.7 19.7 19.7 ...
Code: Alles auswählen
output <- (data.frame(character(0), len = numeric(0)))
for (i in 1:length(unique(tagesmittel$Codename)) ) {
temp <- subset(tagesmittel, Codename == unique(tagesmittel$Codename)[i])
output <- rbind(output, data.frame(temp$Codename[i], min(temp$Tagesmittel, na.rm=T), max(temp$Tagesmittel,na.rm=T), temp$fw[1])) }
Code: Alles auswählen
> output
Station.i. min max fw
1 ANDO NA NA 19.67
2 AUSS NA NA 86.89
3 EHRW NA NA 74.59
...
15 INNS -0.7 81.6 0.00
...
120 DRES -0.2 68.5 0.00
121 ERFU NA NA 100.00
122 ERLA NA NA 33.61
123 <NA> NA NA 35.25
124 <NA> NA NA 100.00
125 <NA> -0.2 44.5 0.00
...
669 <NA> NA NA 90.16
670 <NA> NA NA 93.44
671 <NA> NA NA 78.69
672 <NA> NA NA 88.52
Ich habe ein stark verkürztes csv.File mit einigen Testdaten angehängt.
Danke für eure Hilfe.
Grüße
Jessi