Datenauswahl anhand einer Datumsperiode mit anschließender Berechnung von Werten

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
Strix
Beiträge: 2
Registriert: Di Sep 03, 2019 1:47 pm

Datenauswahl anhand einer Datumsperiode mit anschließender Berechnung von Werten

Beitrag von Strix »

Liebe R-Forum User und Userinnen,

vor etwas mehr als drei Jahren hab ich hier schon einmal wunderbar Hilfe erhalten und jetzt bräuchte ich euch wieder. Ich stehe mit einem Datensatz etwas auf der Leitung. Es geht um Brutdaten einer Vogelart und den Einfluss, den z.B. Niederschlag auf diese Bruten hat.
Dafür möchte ich unter anderem den Mittelwert des Niederschlags bzw. Minima und Maxima in der jeweiligen Brutperiode ansehen. Bei der Berechnung dieser Werte stehe ich gerade an.

Brutbeginn, Brutende und die Wetterstation in der Nähe der jeweiligen Brut stehen in einem Datensatz ("brut"), Niederschlagswerte pro Tag und Wetterstation stehen in einem anderen ("wetter").

Code: Alles auswählen

wetter <- data.frame(
  'Station'=c(0,0,0,0,0,1,1,1,1,1), # unterschiedliche Wetterstationen
  'Julian_Day'=c(1,2,3,4,5,1,2,3,4,5), # Datum angegeben als Julianisches Datum
  'Niederschlag'=c(10,80,20,50,10, 20,30,10,20,40) # Niederschlag an den jeweiligen Wetterstationen zum jeweiligen Datum
  )
wetter

brut <- data.frame(
  'Anfang'=c(1,2,1,3), # Beginndatum der Brut angegeben als julianisches Datum
  'Ende'=c(3,4,5,5), # Enddatum der Brut angegeben als julianisches Datum
  'Station'=c(0,1,1,0) # Wetterstation in der Nähe der Brut
  )
brut
Nun möchte ich gerne für jede Brut (ausgehend von ihrem Anfang und Enddatum) den mittleren Niederschlag in Abhängigkeit von der Station an der die Brut stattfand berechnen.

Ein Kollege meinte ich soll es mit folgendem versuchen:

Code: Alles auswählen

Wetter_Brut = wetter

Wetter_Brut = wetter
Wetter_Brut = Wetter_Brut[Wetter_Brut$Anfang>=brut$Anfang[i],]
Wetter_Brut = Wetter_Brut[Wetter_Brut$Anfang<=brut$Ende[i],]
Wetter_Brut = Wetter_Brut[Wetter_Brut$Station==brut$Station[i],]

brut[i,3]=mean(Wetter_Brut$Niederschlag)
Das bringt mir allerdings nur folgende Fehlermeldung ein:

Code: Alles auswählen

Error in brut$Anfang[i] : invalid subscript type 'list'
Selbst hätte ich gerne etwas in Richtung "wähle jeweils den Niederschlag von Anfangs- bis Enddatum in Abhängigkeit von der Wetterstation, berechne den Mittelwert (oder gib das Minimum an) über diese Periode und schreibe es neben die jeweilige Brut in eine neue Spalte"

Ich bin etwas ratlos, obwohl ich mir sicher bin, dass es kein sonderlich kompliziertes Problem ist... vielleicht überwiegt gerade der Knopf im Kopf.

Für eure Hilfe wäre ich wieder einmal sehr dankbar!

Liebe Grüße,
Strix
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Datenauswahl anhand einer Datumsperiode mit anschließender Berechnung von Werten

Beitrag von jogo »

Hallo Strix,

bei mir sieht das so aus:

Code: Alles auswählen

Nieder <- function(Bi)
  sum(subset(wetter, Station==Bi$Station & Bi$Anfang <= Julian_Day & Julian_Day<=Bi$Ende)$Niederschlag)

brut$Niederschlag <- sapply(1:nrow(brut), function(i) Nieder(brut[i,]))
brut
Hier ist auch noch eine Lösung mit mapply():

Code: Alles auswählen

Nieder2 <- function(Stat, Anf, End)
  sum(subset(wetter, Station==Stat & Anf <= Julian_Day & Julian_Day<=End)$Niederschlag)

mapply(Nieder2, brut$Station, brut$Anfang, brut$Ende)
Gruß, Jörg
Strix
Beiträge: 2
Registriert: Di Sep 03, 2019 1:47 pm

Re: Datenauswahl anhand einer Datumsperiode mit anschließender Berechnung von Werten

Beitrag von Strix »

Hallo Jörg,

vielen herzlichen Dank! Das ist so simpel wie genial :) die Möglichkeit mir dafür selbst eine Funktion zu schreiben, fiel mir nicht ein...
Es ist echt schön, wie schnell ihr hier Lösungen aufzeigt!
Wer weiß, nachdem die Auswertung sicher noch ein paar Überraschungen bereit hält, melde ich mich vielleicht bald wieder.

Liebe Grüße,
Strix
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Datenauswahl anhand einer Datumsperiode mit anschließender Berechnung von Werten

Beitrag von jogo »

Hallo Strix,
Strix hat geschrieben: Mi Sep 04, 2019 9:05 am die Möglichkeit, mir dafür selbst eine Funktion zu schreiben, fiel mir nicht ein...
ohne das Schreiben eigener Funktionen wäre der Nutzen der apply-Funktionen (und auch z.B. aggregate()) sehr eingeschränkt

Gruß, Jörg
Antworten