2012-05-08 19 views
6

Ich mache Analysen stündlicher Niederschlag in einer Datei, die unorganisiert ist. Allerdings habe ich es geschafft, um aufzuräumen und speichern sie in einem Datenrahmen (genannt CA1), die die Form annimmt wie folgt:Zeitreihen und Stl in R: Fehler nur univariate Serien sind erlaubt

Station_ID Guage_Type Lat Long  Date Time_Zone Time_Frame H0 H1 H2 H3 H4 H5  H6  H7  H8  H9  H10  H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23 
1 4457700   HI 41.52 124.03 1948-07-01   8  LST 0 0 0 0 0 0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0 0 0 0 0 0 0 0 0 0 0 0 
2 4457700   HI 41.52 124.03 1948-07-05   8  LST 0 1 1 1 1 1 2.0000000 2.0000000 2.0000000 4.0000000 5.0000000 5.0000000 4 7 1 1 0 0 10 13 5 1 1 3 
3 4457700   HI 41.52 124.03 1948-07-06   8  LST 1 1 1 0 1 1 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0 0 0 0 0 0 0 0 0 0 0 0 
4 4457700   HI 41.52 124.03 1948-07-27   8  LST 3 0 0 0 0 0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0 0 0 0 0 0 0 0 0 0 0 0 
5 4457700   HI 41.52 124.03 1948-08-01   8  LST 0 0 0 0 0 0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0 0 0 0 0 0 0 0 0 0 0 0 
6 4457700   HI 41.52 124.03 1948-08-17   8  LST 0 0 0 0 0 0 0.3888889 0.3888889 0.3888889 0.3888889 0.3888889 0.3888889 6 1 0 0 0 0 0 0 0 0 0 0 

Wo H0 bis H23 repräsentieren die 24 Stunden am Tag (Zeile)

Verwendung nur CA1 (die Datenrahmen oben), nehme ich jeden Tag (Zeile) von 24 Punkten und transponieren vertikal und verketten die restlichen Tage (Zeilen) zu einer variablen, die ich DAT1 nennen:

> dat1[1:48,] 
    H0 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23 H0 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 2 2 2 4 5 5 4 7 1 1 0 0 10 13 5 1 1 3 

die Variable DAT1 Verwendung Ich gebe es als Argument ein, um Zeitreihendaten zu erhalten:

> rainCA1 <- ts(dat1, start = c(1900+as.POSIXlt(CA1[1,5])$year, 1+as.POSIXlt(CA1[1,5])$mon), 
    frequency = 24) 

Ein paar Dinge zu beachten:

>dim(CA1) 
    [1] 5636 31 
>length(dat1) 
    [1] 135264 

So 5636 * 24 (Gesamtdatenpunkte [24] pro Zeile) = 135.264 Gesamtpunkte. Die Länge (regenCA1) stimmt mit den obigen Punkten überein. Wenn ich jedoch ein Ende in der TS-Funktion setzen, wie

>rainCA1 <- ts(dat1, start = c(1900+as.POSIXlt(CA1[1,5])$year, 1+as.POSIXlt(CA1[1,5])$mon), 
    end = c(1900+as.POSIXlt(CA1[5636,5])$year, 1+as.POSIXlt(CA1[5636,5])$mon), 
    frequency = 24) 

I 1134 Gesamtlänge Punkte, wo ich eine Menge Daten fehle. Ich gehe davon aus, dass dies an den Daten liegt, die nicht aufeinander folgen, und da ich nur den Monat und das Jahr als Argument für den Startpunkt verwende.

Continuing, in dem, was ich denke, der richtige Weg ist, die erste ts Berechnung ohne Ende Argument, ich habe es als Eingang für stl liefern:

>rainCA1_2 <-stl(rainCA1, "periodic") 

Leider bekomme ich einen Fehler:

Error in stl(rainCA1, "periodic") : only univariate series are allowed 

Was ich nicht verstehe oder wie es geht. Wenn ich jedoch zur ts-Funktion zurückkehre und das Argument end zur Verfügung stelle, funktioniert stl ohne Fehler.

Ich habe in vielen Foren recherchiert, aber niemand (oder nach meinem Verständnis) bietet eine gute Lösung, um die Datenattribute von stündlichen Daten zu erhalten. Wenn mir jemand helfen könnte, würde ich es sehr schätzen. Vielen Dank!

Antwort

7

Dieser Fehler ist ein Ergebnis der Form Ihrer Daten. Versuchen Sie > dim(rainCA1); Ich vermute es so etwas wie > [1] 135264 1 zu geben. Ersetzen Sie rainCA1 <- ts(dat1 ... durch rainCA1 <- ts(dat1[[1]] ..., und es sollte funktionieren.

Ob es so richtig tut, frage ich mich ... Es scheint mir Ihre erste Aufgabe des Unternehmens ist es, Ihre Daten von einem einheitlichen Format zu erhalten. Stellen Sie sicher, dass ts() den richtigen Eingang erhält. Überprüfen Sie die genaue Spezifikation von ts.

ts() interpretiert Datum-Uhrzeit-Formate nicht. ts() erfordert aufeinanderfolgende Datenpunkte mit einem festen Intervall. Es benutzt einen großen Zähler und einen kleinen Zähler (von denen frequency in einen großen Zähler passen). Wenn Ihre Daten beispielsweise stündlich sind und Sie saisonale Schwankungen auf täglicher Ebene erwarten, ist frequency gleich 24.start und end sind daher in erster Linie Kosmetika: start zeigt lediglich t (0) für den Hauptzähler an, wohingegen end t (end) bezeichnet.

0

Eine Lösung I ist time_series_var <- ts(data[, c("var_of_interest")]) gefunden und dann time_series_var <- ts(as.vector(time_series_var)) und dann der Fehler im Zusammenhang mit Univariate verschwinden, da die Dimensionen jetzt korrekt sind.

Verwandte Themen