Growing Degree Days -> Schleife?

Allgemeine Fragen zur Programmierung mit R.

Growing Degree Days -> Schleife?

Beitragvon Chrisen » So 18. Nov 2018, 19:13

Hallo zusammen,

ich bin grade dabei Growing Degree Days (Wachstumsgradtage) für einen Standort zu berechnen, um zu sehen ab welchem Datum in jedem Jahr (1971-2011) eine Pflanze blüht.
Dazu habe ich die Funktion "gdd" aus dem Package "pollen" verwendet:

Code: Alles auswählen
Stuttgart_gdd = gdd (tmax = Stuttgart$tmax, tmin = Stuttgart$tmin, tbase = 10, tbase_max = 30)
Stuttgart$gdd<-Stuttgart_gdd


Das funktioniert soweit auch ganz gut, außer dass die gdd nicht für jedes Jahr neu berechnet werden. Es wird also z.B. nach dem 1971-12-31 einfach weiter gerechnet. Ich bräuchte es aber so, dass ab dem 1972-01-01 wieder von vorn gestartet wird. Und das eben bei jedem Jahr.

Code: Alles auswählen
      Datum        tmax    tmin    gdd
363 1971-12-29      1.4    -2.5    1287.05
364 1971-12-30      0.7    -2.5    1287.05
365 1971-12-31      4.6    -0.8    1287.05
366 1972-01-01      2.7    -0.6    1287.05
367 1972-01-02      1.4    -1.5    1287.05
368 1972-01-03      1.6    -2.8    1287.05

Nicht wundern: Im obigen Auszug ist die gdd immer gleich, weil sich da in den Wintermonaten nix ändert.

Meine Vermutung ist, dass ich das i.wie mit einer Schleife lösen könnte. Aber leider bin ich noch nicht so fit in R und kenne mich mit Schleifen noch nicht wirklich aus :/

Hätte da jemand eine Idee? Oder kann man das vllt. sogar anders lösen? Würde mir mega weiterhelfen :)

VG Chris
Chrisen
 
Beiträge: 5
Registriert: Mo 29. Okt 2018, 15:46
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Growing Degree Days -> Schleife?

Beitragvon jogo » So 18. Nov 2018, 23:48

Hallo Chris,

egal, welche Technik Du anwendest, Du benötigst als Gruppierungsvariable das Jahr.
Für den Rest würde ich persönlich data.table verwenden. Das sieht dann so aus:
Code: Alles auswählen
library("data.table")
setDT(Stuttgart)
Stuttgart[, Jahr:=substr(Datum, 1, 4)]
Stuttgart[, GDD:=gdd(tmax, tmin, tbase=10, tbase_max=30), by=Jahr]
Stuttgart[] ### Ergebnis anzeigen

Gruß, Jörg
jogo
 
Beiträge: 157
Registriert: Mo 26. Feb 2018, 09:56
Danke gegeben: 3
Danke bekommen: 1 mal in 1 Post

Re: Growing Degree Days -> Schleife?

Beitragvon Chrisen » Mo 19. Nov 2018, 01:03

Hallo Jörg,

vielen vielen Dank! Hat genauso geklappt wie ich es mir erhofft habe. Da wäre ich echt nie drauf gekommen :oops:

VG Chris
Chrisen
 
Beiträge: 5
Registriert: Mo 29. Okt 2018, 15:46
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Growing Degree Days -> Schleife?

Beitragvon jogo » Mo 19. Nov 2018, 10:14

Hallo Chris,

die klassische Variante sieht so aus:
Code: Alles auswählen
Stuttgart$Jahr <- substr(Stuttgart$Datum, 1, 4)
L <- split(Stuttgart, Stuttgart$Jahr)

Ergebnisliste <- lapply(L, function(Li) { Li$GDD <- gdd(Li$tmax, Li$tmin, tbase=10, tbase_max=30); Li } )
Ergebnis <- do.call(rbind, Ergebnisliste)

Gruß, Jörg
jogo
 
Beiträge: 157
Registriert: Mo 26. Feb 2018, 09:56
Danke gegeben: 3
Danke bekommen: 1 mal in 1 Post

Re: Growing Degree Days -> Schleife?

Beitragvon Chrisen » Mo 19. Nov 2018, 13:07

Ok danke dir, Jörg :) Speicher ich gleich mal mit ab :)
Chrisen
 
Beiträge: 5
Registriert: Mo 29. Okt 2018, 15:46
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu Programmierung allgemein

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron