Seite 1 von 1

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

Verfasst: Mi Mär 03, 2021 9:24 pm
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

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

Verfasst: Mi Mär 03, 2021 10:00 pm
von EDi
Bitte ein reproduzierbares Beispiel posten.

https://stackoverflow.com/questions/596 ... le-example

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

Verfasst: Do Mär 04, 2021 10:21 am
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
)