Liste mit Type-S3-Objecte mit merge.zoo erstellen

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

Antworten
SchroedingersCat
Beiträge: 5
Registriert: Sa Feb 20, 2021 7:57 pm

Liste mit Type-S3-Objecte mit merge.zoo erstellen

Beitrag von SchroedingersCat »

Hallo zusammen,

ich hänge schon wieder seit Tagen an einem Problem mit dem Format meiner Daten und komme nicht weiter, weil ich nicht gelernt habe mit Objekten in dieser Form zu arbeiten und auch mit den Beispiele von rdocumentation komme ich nicht weiter.
Mein eigentliches Ziel ist es, die Evapotranspiration mit dem gleichnamigen Package zu Berechnen, wofür die Daten ausgewertet, Datenlücken geschlossen und schön in einen data.frame abgespeichert habe. Nun wollte das Modell jedoch eine Liste von mir, was eigentlich kein Problem wäre, doch ich kriege immer folgenden Error, was m.E. am Datentyp bzw. den Attributen liegt.

Code: Alles auswählen

ET0_Modell1 <- ET.PenmanMonteith(Data_List, constants, ts = "daily", solar = "data", wind =  "yes", crop = "short", message = "yes", AdditionalStats = "yes", save.csv = "yes")

Error in aggregate.data.frame(as.data.frame(x), ...) : 
  'by' must be a list
 

Hier ein Bild von meiner erstellten Liste:
Bild
Klappt irgendwie nicht, daher hier ein Imgur Link: https://imgur.com/a/epLO1HI

Und hier das Bild eines trainings-Datensatzes, in welche Form ich die den data.frame wohl bringen muss:
Bild
Und noch mal: https://imgur.com/a/ilbyw1G

Meine Recherche hat mich durch den Typ S3:zoo zum packege merge.zoo gebracht. Damit sollte es doch eigentlich funktionieren, die Ausgangsdaten in die richtige Form zu bringen, oder? Denn dass Objekte in einer Liste mehrere Attribute haben, kenne ich so nicht. Hier ein Beispiel von Tmax:

Code: Alles auswählen

> processeddata[["Tmax"]]
2001-03-01 2001-03-02 2001-03-03 2001-03-04 2001-03-05 2001-03-06 2001-03-07 2001-03-08 2001-03-09 2001-03-10 2001-03-11 2001-03-12 
      28.8       27.4       29.0       26.3       32.7       35.7       33.8       33.8       35.6       27.5       24.0       20.9 
2001-03-13 2001-03-14 2001-03-15 2001-03-16 2001-03-17 2001-03-18 2001-03-19 2001-03-20 2001-03-21 2001-03-22 2001-03-23 2001-03-24 
      21.2       26.2       30.6       27.5       18.8       21.4       23.6       25.1       15.3       20.4       24.1       21.3 

Hier noch ein kleiner Ausschnitt meines Datensatzes als data.frame, als csv2 eingelesen:

Code: Alles auswählen

Date.daily Date.monthly  J i Ndays Tmax Tdew Tmin RHmax RHmin   u2 uz     Rs  n Cd Precip P.monthly Epan va vs
1  2018-01-01     Jan 2018  1 1     1  6.2   NA  2.6 90.44 60.49 3.26 NA  46.21 NA NA     NA        NA   NA NA NA
2  2018-01-02     Jan 2018  2 1     2  3.7   NA  1.3 92.38 66.36 3.29 NA  52.89 NA NA     NA        NA   NA NA NA
3  2018-01-03     Jan 2018  3 1     3  9.6   NA  1.7 95.02 68.16 5.28 NA  22.19 NA NA     NA        NA   NA NA NA
4  2018-01-04     Jan 2018  4 1     4  9.3   NA  2.0 96.46 81.82 3.45 NA   8.95 NA NA     NA        NA   NA NA NA
5  2018-01-05     Jan 2018  5 1     5  9.9   NA  5.8 95.54 74.83 1.91 NA  43.65 NA NA     NA        NA   NA NA NA
6  2018-01-06     Jan 2018  6 1     6  7.1   NA  5.0 96.68 83.44 0.97 NA  49.24 NA NA     NA        NA   NA NA NA
7  2018-01-07     Jan 2018  7 1     7  5.3   NA  1.8 97.40 87.10 2.50 NA  25.74 NA NA     NA        NA   NA NA NA
8  2018-01-08     Jan 2018  8 1     8  5.2   NA  1.9 96.40 81.97 2.20 NA  53.15 NA NA     NA        NA   NA NA NA
Außerdem ist mir aufgefallen, dass Date.monthly ebenfalls im falschen Format ist. Auch hier bin ich im package zoo fündig geworden: Der (as.)yearmon Befehl sollte mein Datum ins entsprechende Format bringen. Doch egal ob ich mit dem Date.dail (mitr as.Date konvertiert) oder ob ich die Date.monthly Spalte nutze (was wahrscheinlich sowieso nicht erkannt wird, weil es nur in Excel als Datum definiert war) ich bin einfach unfähig, das ins richtige Format zu kriegen :|


Ich wäre auf jeden Fall sehr dankbar, wenn jemand Erfahrung mit zoo hat und mir auf die Sprünge helfen kann!
LG, Schrödinger
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Liste mit Type-S3-Objecte mit merge.zoo erstellen

Beitrag von EDi »

Bitte ein reproduzierbares Beispiel posten.

https://stackoverflow.com/questions/596 ... le-example
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.
SchroedingersCat
Beiträge: 5
Registriert: Sa Feb 20, 2021 7:57 pm

Re: Liste mit Type-S3-Objecte mit merge.zoo erstellen

Beitrag von SchroedingersCat »

Sorry, ich dachte man könnte anhand der Bilder der Liste und des Datensatzese vielleicht schon etwas sagen. Hier bitte:

Hier der Testdatensatz aus dem package:

Code: Alles auswählen

#Testdatensatz des Packages
install.packages("Evapotranspiration")
library(Evapotranspiration)
data("processeddata")
data("constants")
results <- ET.PenmanMonteith(processeddata, constants, ts="daily", solar="sunshine hours",
                            wind="yes", crop = "short", message="yes", AdditionalStats="yes", save.csv="yes")

Hier mein unveränderter Versuch über den 1. Versuch mit dem Befehl list:

Code: Alles auswählen

Modell <- read.csv2("D:/Users/XXX/Desktop/Modell_Data.csv")
Modell$Date.daily <- as.Date(Modell$Date.daily, format = "%d.%m.%Y")

Data_List <- list(
  Date.daily = Modell$Date.daily,
  Date.monthly = Modell$Date.monthly,
  J = Modell$J,
  i = Modell$i,
  Ndays = Modell$Ndays,
  Tmax = Modell$Tmax,
  Tmin = Modell$Tmin,
  Tdew = NULL,
  RHmax = Modell$RHmax,
  RHmin = Modell$RHmin,
  u2 = Modell$u2,
  uz = NULL,
  Rs = Modell$Rs,
  n = NULL,
  Cd = NULL,
  Precip = NULL,
  P.monthly = NULL,
  Epan = NULL,
  va = NULL,
  vs = NULL
  )

ET0_Modell1 <- ET.PenmanMonteith(Data_List, constants, ts = "daily", solar = "data", wind =  "yes", crop = "short", message = "yes", AdditionalStats = "yes", save.csv = "yes")
Hier ein Ausschnitt des Datensatzes für "Modell":

Code: Alles auswählen

 
 Date.daily Date.monthly  J i Ndays Tmax Tdew Tmin RHmax RHmin   u2 uz     Rs  n Cd Precip P.monthly Epan va vs
1  01.01.2018       Jan 18  1 1     1  6.2   NA  2.6 90.44 60.49 3.26 NA  46.21 NA NA     NA        NA   NA NA NA
2  02.01.2018       Jan 18  2 1     2  3.7   NA  1.3 92.38 66.36 3.29 NA  52.89 NA NA     NA        NA   NA NA NA
3  03.01.2018       Jan 18  3 1     3  9.6   NA  1.7 95.02 68.16 5.28 NA  22.19 NA NA     NA        NA   NA NA NA
4  04.01.2018       Jan 18  4 1     4  9.3   NA  2.0 96.46 81.82 3.45 NA   8.95 NA NA     NA        NA   NA NA NA
5  05.01.2018       Jan 18  5 1     5  9.9   NA  5.8 95.54 74.83 1.91 NA  43.65 NA NA     NA        NA   NA NA NA
6  06.01.2018       Jan 18  6 1     6  7.1   NA  5.0 96.68 83.44 0.97 NA  49.24 NA NA     NA        NA   NA NA NA
7  07.01.2018       Jan 18  7 1     7  5.3   NA  1.8 97.40 87.10 2.50 NA  25.74 NA NA     NA        NA   NA NA NA
8  08.01.2018       Jan 18  8 1     8  5.2   NA  1.9 96.40 81.97 2.20 NA  53.15 NA NA     NA        NA   NA NA NA
9  09.01.2018       Jan 18  9 1     9  8.6   NA  2.1 93.02 67.62 1.29 NA  59.44 NA NA     NA        NA   NA NA NA
10 10.01.2018       Jan 18 10 1    10  7.4   NA  1.8 93.44 67.83 0.78 NA  75.95 NA NA     NA        NA   NA NA NA
11 11.01.2018       Jan 18 11 1    11  7.2   NA  0.9 96.28 65.69 0.67 NA  72.06 NA NA     NA        NA   NA NA NA
12 12.01.2018       Jan 18 12 1    12  2.1   NA  0.1 96.98 79.06 1.85 NA  23.11 NA NA     NA        NA   NA NA NA
13 13.01.2018       Jan 18 13 1    13  1.5   NA  1.0 87.20 73.53 1.56 NA  17.00 NA NA     NA        NA   NA NA NA
14 14.01.2018       Jan 18 14 1    14  0.3   NA  1.2 90.62 74.74 0.75 NA  26.49 NA NA     NA        NA   NA NA NA
15 15.01.2018       Jan 18 15 1    15  3.3   NA  2.7 94.38 72.07 1.84 NA  47.45 NA NA     NA        NA   NA NA NA
16 16.01.2018       Jan 18 16 1    16  5.2   NA  1.5 93.70 77.73 4.21 NA  13.44 NA NA     NA        NA   NA NA NA
17 17.01.2018       Jan 18 17 1    17  2.9   NA  1.6 97.27 80.20 4.71 NA  62.01 NA NA     NA        NA   NA NA NA
18 18.01.2018       Jan 18 18 1    18  4.8   NA  0.4 97.31 79.00 4.51 NA  18.86 NA NA     NA        NA   NA NA NA
19 19.01.2018       Jan 18 19 1    19  4.0   NA  0.1 94.94 63.31 3.18 NA  81.50 NA NA     NA        NA   NA NA NA
20 20.01.2018       Jan 18 20 1    20  2.5   NA  0.5 97.79 72.99 2.55 NA  32.79 NA NA     NA        NA   NA NA NA
21 21.01.2018       Jan 18 21 1    21  3.2   NA  1.0 97.76 66.42 2.08 NA  76.61 NA NA     NA        NA   NA NA NA

Meine Liste an Konstanten:

Code: Alles auswählen

 
constants <- list(
  lambda = 2.45,
  sigma = 4.903e-09,
  Gsc = 0.0820,
  lat = 47.8507,
  lat_rad = 0.8351523,
  as = 0.23,
  bs = 0.5,
  Elev = 660,
  z = 2, 
  Roua = 1.2,
  Ca = 0.001013,
  G = 0,
  alphaA = 0.14,
  alphaPT = 1.26,
  ap = 2.4,
  fz = 28,
  b0 = 1,
  a_0 = 11.9,
  b_0 = -0.15,
  c_0 = -0.25,
  d_0 = -0.0107,
  e0 = 0.81917,
  e1 = -0.0040922,
  e2 = 1.0705,
  e3 = 0.065649,
  e4 = -0.0059684,
  e5 = -0.0005967,
  gammaps = 0.66,
  epsilonMo = 0.92,
  PA = 285.8,
  alphaMo = 17.27,
  betaMo = 237.3,
  sigmaMo = 5.67e-08,
  lambdaMo = 28.5,
  b1 = 14,
  b2 = 1.2
)
Antworten