Ich habe einige Zehntausende von Beobachtungen, die in einer Zeitreihe liegen, aber nach Orten gruppiert sind. Zum Beispiel:
location date observationA observationB
---------------------------------------
A 1-2010 22 12
A 2-2010 26 15
A 3-2010 45 16
A 4-2010 46 27
B 1-2010 167 48
B 2-2010 134 56
B 3-2010 201 53
B 4-2010 207 42
Ich möchte sehen , ob Monat x ‚s observationA
jede lineare Beziehung mit Monat hat x + 1 ist observationB
.
Ich habe einige Nachforschungen angestellt und eine zoo
Funktion gefunden, aber es scheint keine Möglichkeit zu geben, die Verzögerung nach Gruppen zu begrenzen. Wenn ich also den Zoo benutzen würde und observationB
um eine Reihe zurückbleiben würde, würde ich den letzten Ort A observationB
als den ersten Ort B haben observationB
. Ich hätte lieber den ersten observationB
von einem Ort NA
oder einen anderen offensichtlichen Wert, um anzuzeigen, dass "diese Zeile nicht berühren".
Ich denke, es geht mir darum, ob es in R eine eingebaute Möglichkeit gibt, dies zu tun. Wenn nicht, kann ich mir vorstellen, dass ich dies mit einem Standardschleifenkonstrukt erledigen kann. Oder muss ich die Daten überhaupt manipulieren?
quelle
@ mpiktas Um nur zwei kleine Versehen in Version 3 Ihrer Antwort kurz zu erwähnen. Erstens wurde der Ausdruck "schnellere Version" eindeutig irrtümlich verwendet. Zweitens wurde das Wort ": =" im Code übersehen. Das Reparieren des letzteren behebt das erstere: =)
quelle
Anstatt alle
tapply
und zusätzliche Schritte durchzugehen, ist hier ein schnellerer Weg:quelle
Mit dplyr
quelle
Vielleicht möchten Sie sich das
vars
Paket ansehen . Klingt so, als ob Sie versuchen, eine Vektorautoregression (VAR) durchzuführen .quelle
Mit DataCombine:
Daten müssen ebenfalls sortiert werden. Verwenden Sie
slideBy=-1
stattdessen für Verzögerungen.quelle