J'ai quelques dizaines de milliers d'observations qui sont dans une série chronologique mais regroupées par emplacements. Par exemple:
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
Je veux voir si le mois x l » observationA
a une relation linéaire avec le mois x +1 observationB
.
J'ai fait quelques recherches et trouvé une zoo
fonction, mais elle ne semble pas avoir un moyen de limiter le décalage par groupe. Donc , si je zoo et avec décalage observationB
par 1 rang, je finirais l'emplacement A ce dernier observationB
que l' emplacement B premier observationB
. Je préfère avoir le premier observationB
de n'importe quel emplacement NA
ou une autre valeur évidente pour indiquer "ne touchez pas cette ligne".
Je suppose que ce que je veux en venir est de savoir s'il existe une manière intégrée de faire cela dans R? Sinon, j'imagine que je peux y arriver avec une construction de boucle standard. Ou dois-je même manipuler les données?
la source
@ mpiktas Juste pour mentionner brièvement deux petits oublis dans la version 3 de votre réponse. Premièrement, l'expression "version plus rapide" a clairement été laissée par erreur. Deuxièmement, le mot ": =" a été omis dans le code. La fixation de ce dernier corrige le premier: =)
la source
Plutôt que de passer par toutes les
tapply
étapes supplémentaires, voici un moyen plus rapide:la source
Avec dplyr
la source
Vous voudrez peut-être regarder le
vars
paquet. Cela ressemble à une autorégression vectorielle (VAR) .la source
Avec DataCombine:
Les données doivent également être triées. Utilisez
slideBy=-1
plutôt pour les retards.la source