allgemein lag in den Zeitreihen, panel Daten
Ich habe einen Datensatz, der ähnlich wie dieser
User Date Value
A 2012-01-01 4
A 2012-01-02 5
A 2012-01-03 6
A 2012-01-04 7
B 2012-01-01 2
B 2012-01-02 3
B 2012-01-03 4
B 2012-01-04 5
Ich möchte erstellen Sie eine Verzögerung von Value
unter Wahrung User
.
User Date Value Value.lag
A 2012-01-01 4 NA
A 2012-01-02 5 4
A 2012-01-03 6 5
A 2012-01-04 7 6
B 2012-01-01 2 NA
B 2012-01-02 3 2
B 2012-01-03 4 3
B 2012-01-04 5 4
Habe ich es geschafft sehr ineffizient in einer Schleife
df$value.lag1<-NA
levs<-levels(as.factor(df$User))
levs
for (i in 1:length(levs)) {
temper<- subset(df,User==as.numeric(levs[i]))
temper<- rbind(NA,temper[-nrow(temper),])
df$value.lag1[df$User==as.numeric(as.character(levs[i]))]<- temper
}
Dieser ist aber sehr langsam. Ich habe mit by
und tapply
, aber nicht herausgefunden, wie man Ihnen zu arbeiten.
Ich glaube nicht, dass XTS oder TS arbeiten wird, weil der Benutzer das element.
Irgendwelche Vorschläge?
- Ich denke, die
plm
Paket ist eine Implementierung für diese Art von Daten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
ddply
: schneidet den Daten.Rahmen in Stücke und verwandelt jedes Stück.arrange()
Ich denke, der einfachste Weg, zumal eine weitere Analyse zu konvertieren Ihre Daten-frame zu
pdata.frame
Klasse ausplm
Paket.Nach der Umwandlung von
diff()
undlag()
Operatoren können verwendet werden zu erstellen-panel lag und Unterschiede.Stolperte ich über ein ähnliches problem, und schrieb eine Funktion.
Wenn Sie keine Lücken in der Zeit variabel , tun
Wenn Sie Lücken in der Zeit variabel, Lesen Sie diese Antwort
https://stackoverflow.com/a/26108191/3662288
Für ein panel ohne fehlende obs das ist eine intuitive Lösung:
Ähnlich, Sie könnte verwenden
tapply
Die Idee ist genau die gleiche: Wert annehmen, es teilen, durch den Benutzer, und führen Sie dann eine Funktion auf jeder Teilmenge. Die unlist bringt es zurück in vector format.
Vorausgesetzt, die Tabelle ist sortiert, der Benutzer und das Datum, diese kann getan werden, mit
zoo
. Der trick ist, nicht auf einen index angeben, an dieser Stelle.