2016-07-02 10 views
0

Ich habe gerade mit R angefangen und einige Tutorials abgeschlossen. Ich versuche jedoch in die Zeitreihenanalyse zu kommen und habe große Probleme damit. Ich machte einen Datenrahmen, der so aussieht:R: Wie arbeitet man mit Zeitreihen von Sub-Stunden-Daten?

Date  Time  T1 
1 2014-05-22 15:15:00 21.6 
2 2014-05-22 15:20:00 21.2 
3 2014-05-22 15:25:00 21.3 
4 2014-05-22 15:30:00 21.5 
5 2014-05-22 15:35:00 21.1 
6 2014-05-22 15:40:00 21.5 

Da ich wollte nicht mit einem halben Tag arbeiten, ich den ersten und letzten Tag von dem Datenrahmen entfernt. Da R weder das Datum noch die Zeit als solches erkannte, sondern als "Faktor", benutzte ich die lubridate-Bibliothek, um es richtig zu ändern. Jetzt sieht es so aus:

Date  Time T1 
1 2014-05-23  0S 14.2 
2 2014-05-23 5M 0S 14.1 
3 2014-05-23 10M 0S 14.6 
4 2014-05-23 15M 0S 14.3 
5 2014-05-23 20M 0S 14.4 
6 2014-05-23 25M 0S 14.5 

Jetzt beginnt das Problem wirklich. Mit der ts-Funktion ändern Sie das Datum auf 16944 und die Zeit auf 0. Wie richte ich einen Datenrahmen mit dem richtigen Startdatum und der richtigen Häufigkeit ein? Ein neuer Satz von Daten kommt in 5 Minuten, also sollte die Frequenz 288 sein. Ich habe auch versucht, das Startdatum als Vektor zu setzen. Da der 142. Tag des Jahres 22. Mai war habe ich versucht, diese

ts_df <- ts(df, start=c(2014, 142/365), frequency=288) 

Kein Fehler gibt, aber wenn ich für start(ds_df) gehe ich bekommen und end(ds_df):

[1] 2013.998 
[1] 2058.994 

Kann mir jemand einen Tipp geben, wie mit diesen Daten arbeiten?

Antwort

1

"ts" Klasse eignet sich normalerweise nicht für diese Art von Daten. Angenommen DF ist der Datenrahmen reproduzierbar in der Anmerkung am Ende dieser Antwort, wir konvertieren es in ein "zoo" Klassenobjekt und führen dann einige Manipulationen durch. Das zugehörige xts-Paket könnte ebenfalls verwendet werden.

library(zoo) 

z <- read.zoo(DF, index = 1:2, tz = "") 

window(z, start = "2014-05-22 15:25:00") 

head(z, 3) # first 3 
head(z, -3) # all but last 3 
tail(z, 3) # last 3 
tail(z, -3) # all but first 3 

z[2:4] # 2nd, 3rd and 4th element of z 

coredata(z) # numeric vector of data values 
time(z) # vector of datetimes 

fortify.zoo(z) # data frame whose 2 cols are (1) datetimes and (2) data values 

aggregate(z, as.Date, mean) # convert to daily averaging values 

ym <- aggregate(z, as.yearmon, mean) # convert to monthly averaging values 
frequency(ym) <- 12 # only needed since ym only has length 1 
as.ts(ym) # year/month series can be reasonably converted to ts 

plot(z) 

library(ggplot2) 
autoplot(z) 

read.zoo auch verwendet wurden, könnten die Daten in einer Datei zu lesen.

Hinweis:DF oben in reproduzierbarer Form verwendet:

DF <- structure(list(Date = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = "2014-05-22", 
class = "factor"), 
    Time = structure(1:6, .Label = c("15:15:00", "15:20:00", 
    "15:25:00", "15:30:00", "15:35:00", "15:40:00"), class = "factor"), 
    T1 = c(21.6, 21.2, 21.3, 21.5, 21.1, 21.5)), .Names = c("Date", 
"Time", "T1"), class = "data.frame", row.names = c("1", "2", 
"3", "4", "5", "6")) 
+0

Hallo Grothen, vielen Dank für Ihre schnelle Antwort. Ich brauchte eine Weile, um noch einmal zu antworten, aber du hast viel geholfen. – ngn16920

Verwandte Themen