For Loop For Schleife für jede id

For(), If(), While() und Verwandte. Diskussion von programmiertechnischen Fragen.

For Loop For Schleife für jede id

Beitragvon Bolli » Do 9. Feb 2017, 12:36

Liebes Forum, ich habe als r-Neuling die Aufgabe eine Excel-Berechnung in R zu Programmieren. Bisher berechnet diese eine Art Schleife für Klimadaten aus einem Zeitraum von November bis Juni des Folgejahres. Ich möchte dies für 91 solcher Zeiträume, also fast ein Jahrhundert, mit einem Enterdrücken berechnen. Bisher bin ich soweit, dass ich aus einen Dataframe 8 Variablen ausgewählt habe. Tag, Monat, Jahr, Datum, Kalendertag(doy), mittlere Tagestemperatur(tmit), ts(time series), CD(chill days). Die Spalte ts bezeichnet die Jahreszahl der mehrheitlichen Monate des einzelnen Aufnahmezeitraumes und soll mir als Klassifizierung dienen. Beim Datum 17.11.2015 steht also in der Spalte ts das Jahr 2016. Genauso für das Datum 21.02.2016. Auf diese Art wollte ich eine id bilden um eine for-Schleife für jeden Zeitraum durchlaufen zu lassen. Nun soll für jeden Tag innerhalb des Zeitraumes in der neuen Spalte CD ein Kältetag addiert werden, wenn die mittlere Temperatur <= 9°C ist. Die Schleife soll automatisch enden, wenn der Zeitraum ts endet (je nachdem ob Schaltjahr oder nicht also 91*242 bzw. 243 Zeilen). Ich verspreche mir also 91 verschiedene Kältesummen, deren Zwischenergebnisse in der Spalte CD mitgeführt werden. Später folgen in der Berechnung Summen von Wärmetagen und Einbeziehung weiterer Konstanten. Fürs erste würde mir dieser Schritt aber schon sehr helfen. Meine Schleife macht nämlich leider unabhängig der Zeiträume einfach die Berechnung 91x. Ich nehme an, dass ich $ts vielleicht falsch formatiert habe, komme hier aber nicht weiter. Ein Problem am Rande ist, dass ich den jeweils ersten Tag nicht einbeziehe, weil die Addition ja auf den Vortag aufbaut und da noch kein Wert ist. Vielleicht eine weitere Schleife einbauen mit ifelse (i!=1, 0, 1) oder geht das auch eleganter?
Code: Alles auswählen
df <-subset(df, mo <7 | mo > 10)
df<- df[,c(1:5,7)]
df$ts<-ifelse(df$mo <10, df$jahr, df$jahr+1)
ll <-levels(as.factor(df[,"ts"]))
df$CD=0
for (i in 2:length(ll)) {
          if(df$tmit[i]<=9){
          df$CD[i]= df$CD[i-1]+1
      }else {
          df$CD[i]=df$CD[i-1]
      }
}


Ich freue mich über jede Hilfe und hoffe, dass mein erster Post halbwegs verständlich formuliert ist.
Bolli
 
Beiträge: 1
Registriert: Do 9. Feb 2017, 11:39
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Zurück zu Programmierkonzepte

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron