Daten untersuchen

Methoden der Zeitreihenanalyse

Moderator: schubbiaschwilli

Antworten
Laukez

Daten untersuchen

Beitrag von Laukez »

Hallo zusammen.

Ich möchte eine Zeitreihe von 1930 - 2016 in verschiedene Bereiche abhängig vom Jahr einteilen.
Meine Daten sehen wie folgt aus:

Code: Alles auswählen

View(time_series)

Jahr   Monat    Tag     Uhrzeit     N[mm]                        

1990    12         31        23:50        1                              
1990    12         31        23:55        1                              
1991    01         01        00:00        0                              
1991    01         01        00:05        0                              
Nun möchte ich die Zeitreihe in 10-Jahres Dekaden einteilen. z.B von 1990 bis 1999. Die Dekadengröße ziehe ich mir vorher aus einer cnf file, wird also in der Schleife immer neu definiert:

Code: Alles auswählen

for (i in 1:length(no_decades){

  size = as.numeric(strsplit(as.character(input[12+i,1]), ",")[[1]])     
  size = seq(from = size[1], to = size[2], by = 1)                      ## für 1990 - 1999 also: size = c(1990, ..., 1999)

  decade = NULL
  decade = matrix(0, nrow = 1, ncol = 6)
  decade = rbind(decade, time_series[time_series[,1] == 1995,])

}
Bis hierhin klappt es. Mein Problem liegt darin, nach mehreren Jahren gleichzeitig zu suchen.
Wenn ich es so mache, zerhaut er mir die Tabelle leider vollkommen.

Code: Alles auswählen

  decade = rbind(decade, time_series[time_series[,1] == 1995 | time_series[,1] == 1996,])

Außerdem wäre es super, wenn ich statt "==1995" auf meinen Vektor "size" verweisen kann. "==size" an der Stelle i klappt ja leider nicht, da er bei einem durchlauf auf alle Jahre achten soll.

Vielen Dank schon mal für eure Hilfe!

Beste Grüße,
Lukas
Zuletzt geändert von Laukez am Di Feb 27, 2018 11:38 am, insgesamt 1-mal geändert.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Daten untersuchen

Beitrag von jogo »

Kannst Du uns bitte das Objekt input zeigen, z.B. das Ergebnis von

Code: Alles auswählen

dput(input)
Ich verstehe nicht, warum Du innerhalb der Schleife (also bei jedem Durchlauf) das Objekt decade auf NULL setzst.
Welchen Sinn soll denn dann noch das anschließende rbind() haben?

Gruß, Jörg
Laukez

Re: Daten untersuchen

Beitrag von Laukez »

View(input)

Code: Alles auswählen

#--------------------- time series --------------------------#

1                                                                               <-  No of synthetic time series analyzed
3                                                                               <-  No of decades


#--------------------- saving --------------------------#
# 1 for saving in working directory. Otherwise fill in the path

D:\Lukas\Dekaden                                                                <-  saving directory


#--------------------- working direktory --------------------------#

Stötten                                                                         <-  Station name



#----------------------INPUT TIME SERIES --------------------------#

# 1 if the time series is in the working directory. Otherwise fill in the path

D:\Lukas\Stötten.012                                                            <-  Path of the observed time series
    


#--------------------- decades --------------------------#

1995, 2004                                                                      <-  first decade
2005, 2014                                                                      <-  second decade
2010, 2015                                                                      <-  third decade


Ja, die Schleife ist so noch nicht fertig. Ich werde "decade" nach jedem Durchlauf als Textdatei abspeichern. Nach dem Speichern kann ich die Variable auf NULL setzen und neu definieren.
Das ich es nach jeden Durchlauf wieder auf NULL setze hat sich bei mir eingebürgert, da ich schon mal das Problem hatte, dass die variable nicht neu gespeichert wurde. Ich weiß, dass es eig auch ohne gehen müsste.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Daten untersuchen

Beitrag von jogo »

Ist das so eine Art Parameterdatei für alle möglichen Einstellungen für die Berechnung?
Ist das richtig, die zweite und die dritte Dekade überlappen sich und die dritte Dekade hat nur 6 Jahre?
Wegen der Überlappung kann nicht einfach eine Variable für die Zeitreihe definiert werden, die jedem Zeitpunkt die Nummer der Dekade zuordnet. Vielmehr ist es nur möglich für die drei Dekaden entsprechende Teildatensätze zusammenzustellen und in einer Liste zu halten.

Gruß, Jörg
Laukez

Re: Daten untersuchen

Beitrag von Laukez »

Oh, nein.

Das war noch aus den Versuchen.

Code: Alles auswählen

1985, 1994                                                                      <-  first decade
1995, 2004                                                                      <-  second decade
2005, 2014                                                                      <-  third decade
so müsste es richtig heißen.
Und ja. So muss ich alle Änderungen wie die Auswahl der Stationen oder die Anpassung der Dekadenlänge nicht im Skript vornehmen, sondern ändere nur die Textdatei.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Daten untersuchen

Beitrag von jogo »

Aber woher weißt Du, an welcher Stelle in der Datei die Jahreszahlen für die Dekaden stehen?
Diese Konstruktion ist ganz schön wackelig, wenn man bedenkt, wie schnell man mal versehentlich die Enter-Taste gedrückt hat.

Gruß, Jörg
Laukez

Re: Daten untersuchen

Beitrag von Laukez »

Hallo Jörg,

ja es gibt bestimmt bessere methoden aber über Variablen kann ich schon ganz gut auf die entsprechenden Stellen zugreifen. Das klappt bei mir bisher ganz gut;)
Ich versuche mich erst seid ca. 3 Monaten am programmieren also wenn du da noch einen besseren Vorschlag hast gerne her damit;)

Mit der Zuordnung der Jahreszahlen zu der entsprechenden Dekade hast du mir schon einen guten Hinweis gegeben. Das probiere ich gerade aus. Danke dafür.

Beste Grüße,
Lukas
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Daten untersuchen

Beitrag von jogo »

Hallo Lukas,

ich könnte mir das etwa so vorstellen:

Code: Alles auswählen

Dekaden <- read.table(sep=",", text=input[12+(1:no_decades), 1])
names(Dekaden) <- c("Start", "Ende")
print(Dekaden) ### Kontrolle

time_series$Dekade <- 0 ### init
for (i in 1:length(no_decades)) {
  i.dek <-  time_series$Jahr %in% seq(Dekaden$Start[i], Dekaden$Ende[i])
  time_series$Dekade[i.dek] <- i
}
(auch wenn ich die Parametrisierung für ungünstig bzw. sogar gefährlich halte, habe ich mich nach ihr gerichtet)

Ansonsten hier noch eine kleine Anregung für die Verwendung von cut():

Code: Alles auswählen

tSer <- data.frame(J = c(1985, 1994,     1995, 2004,    2005, 2014 ))
tSer$Dek <- cut(tSer$J, breaks=c(1984, 1994, 2004, 2014), right=TRUE, labels = 1:3)
tSer
Gruß, Jörg
Antworten