Datenanalyse von Oberflächenabfluss auf Basis von Monatsmitteln

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
RSAGA_Fan
Beiträge: 6
Registriert: So Dez 02, 2018 9:12 pm

Datenanalyse von Oberflächenabfluss auf Basis von Monatsmitteln

Beitrag von RSAGA_Fan » Di Jun 11, 2019 7:58 pm

Hallo liebe Mitlesende,

ich bin gerade dabei, Daten für meine Masterarbeit in der Geographie auszuwerten und verstehe seit den letzten Tagen stundenlanger Foren-, Lehrbuch- Video-Tutorial-Suchen (mit nur kleinen Befehls-Kontruktions-Erfolgen) nur noch 'Bahnhof' und habe nun gefühlt schon wieder so viel verrödelt.
Hier hatte ich vor ein paar Monaten bei einer Abschlussaufgabe schon einmal super erfolgreiche Hilfestellungen bekommen und wende mich daher mal wieder an Euch (und verzeiht bitte, wenn das im Endeffekt total einfach ist):

Bis jetzt habe ich es geschafft aus 180 (einzelne Monitor-Dateien, wie einer von ihnen im Anhang mit dabei ist) .txt Dateien, generiert über ein GIS Programm schonmal CSV Dateien erstell und über eine for-Schleife mehrere Dinge eingefügt.
U.a. die Spalten "Month" und "Year", da ich die Tagesdaten, die mir nun vorliegen, gerne in Monatsmittel in Tabellen-Form (die man auch abspeichern kann) bringen wollte, da die Tagesdaten von 30 Jahren einfach zu viele zum sinnvoll darstellen, korrelieren - eben einfach nicht handhabbar - sind.

Genau das bekomme ich nun jedoch leider nicht hin.

Mit

Code: Alles auswählen

tapply(M1$Q, M1$Month, FUN=mean)
habe ich das zwar für alle Monate der 30 Jahre geschafft, aber ich bekomme es nicht hin die einzelnen Monate bezogen auf die Jahre zu haben...

Für meine weiteren Berechnungen wäre folgende Darstellung/Auflistung am hilfreichsten:

1 2 3 4 5 6 7 8 9 10 11 12
1981 7248.2831 5936.9455 4165.3946 779.6563 253.7495 156.6820 315.0604 258.6122 290.9103 1222.4469 3535.6076 6744.3348
1982 ... ... .... ... ... .... ... ... .... ... ... ...
1983 ... ... .... ... ... .... ... ... .... ... ... etc.

Und dann immer für die einzelnen Paramter: T, P, Snow, Q, WS etc.

Dann muss ich das ganze ja für jeden einelnen Monitor (also Messstelle im Feld) machen, sodass ich das am besten wieder mit einer Schleife
mache, bloß ist mir nach dem umwandeln der .txt Dateien keine Schleife mehr erfolgreich geglückt (wobei ich auch gestehen muss, dass ich mich mit Schleifen immer noch sehr schwer tue).

Kann man solche statisischen Parameter, bzw. im Folgenden auch noch Berechnungen zur Normalverteilung und Korrelationen mit Schleifen auf Datensätze anwenden?
Habt ihr dazu vllt. auch noch einen Tipp für mich? Gibt es das evtl. schon al Forum-Eintrag und ich hab den nur nicht gefunden?
Vielleicht auch ein gutes Skript oder Buch? Ich söber gerade viel von Dormann, Wollschläger aber auch R für Dummies und ähnliches... dort wird jedoch auf sowas nicht explizit eingegangen und ich hatte immer die Hoffnung, das mit einer angelesenen Basis auch so zu schaffen.

Ich habe mal eine der Monitor-Tabellen, mit denen ich gerade arbeite beigefügt (da die Daten aus 30 Jahren zu groß waren, habe ich sie auf 4 Jahre verkürzt) und hoffe sehr, dass ihr mir helfen könnt.


Lieben Gruß und danke für eure enorme Hilfsbereitschaft und Aktivität in diesem Forum!
Marie
Dateianhänge
M1.csv
(242.56 KiB) 28-mal heruntergeladen

jogo
Beiträge: 1478
Registriert: Fr Okt 07, 2016 8:25 am

Re: Datenanalyse von Oberflächenabfluss auf Basis von Monatsmitteln

Beitrag von jogo » Di Jun 11, 2019 8:34 pm

Hallo Marie,

das ist ein Problem der Art
https://stackoverflow.com/questions/589 ... ide-format
Hier mal eine klassische Lösung:

Code: Alles auswählen

dat <- read.csv2("http://forum.r-statistik.de/download/file.php?id=543")
A <- aggregate(. ~ Year + Month, data=dat[2:20], FUN=mean)
xtabs(T ~ Year + Month, data=A)
Bei Deinen Datenmengen ist die Verwendung von data.table nicht abwegig.

Code: Alles auswählen

library("data.table")
Dat <- fread("http://forum.r-statistik.de/download/file.php?id=543", dec=",")
dcast(Dat, Year ~ Month, fun=mean, value.var = "P")
Gruß, Jörg

Benutzeravatar
EDi
Beiträge: 887
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Datenanalyse von Oberflächenabfluss auf Basis von Monatsmitteln

Beitrag von EDi » Di Jun 11, 2019 9:15 pm

Hier mal ein kleines benchmark...
read.csv2() kann man noch durch data.table::fread() oder vroom::vroom() ersetzen für schnelleres einlesen...

Code: Alles auswählen

dat <- read.csv2("http://forum.r-statistik.de/download/file.php?id=543")[2:20]
library(dplyr)
library(data.table)

dt <- setDT(dat)
require(microbenchmark)
microbenchmark( base = aggregate(. ~ Year + Month, data=dat, FUN=mean),
                dplyr= dat %>%  group_by(Year, Month) %>% summarise_all(mean),
                DT   = dt[, lapply(.SD, mean), by = list(Year, Month)], unit = "ms")
# Unit: milliseconds
#   expr      min       lq      mean   median       uq        max neval cld
#   base 8.496769 8.581335 10.358600 8.706912 8.860637 126.238727   100   b
#  dplyr 1.225546 1.310583  1.436955 1.488971 1.510891   1.833762   100  a 
#     DT 0.891193 0.960562  1.061679 1.086601 1.145307   1.343761   100  a 
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.

RSAGA_Fan
Beiträge: 6
Registriert: So Dez 02, 2018 9:12 pm

Re: Datenanalyse von Oberflächenabfluss auf Basis von Monatsmitteln

Beitrag von RSAGA_Fan » Mi Jun 12, 2019 6:55 pm

Herzlichsten Dank!!! :D

Das werde ich gleich ausprobieren und damit mal über meine Daten rechnen und morgen berichten wie es lief.

Vielen Dank und schönen Abend!

Benutzeravatar
EDi
Beiträge: 887
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Datenanalyse von Oberflächenabfluss auf Basis von Monatsmitteln

Beitrag von EDi » Do Jun 13, 2019 12:05 am

jogo hat geschrieben:
Mi Jun 12, 2019 9:56 am
Mit

Code: Alles auswählen

dat %>%  group_by(Year, Month) %>% summarise_all(mean)
ist man fast so schnell wie data.table.
Bei ... %>% mutate_at(vars(-group_cols()), mean) sind irgendwelche Dopplungen im Ergebnis.
# A tibble: 1,827 x 19

Gruß, Jörg
Recht hast du! Habs geupdated...
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.

Antworten