Je soupçonne que c'est une question quelque peu simple avec plusieurs solutions, mais je suis toujours un peu novice dans R et une recherche exhaustive n'a pas donné de réponses qui parlaient bien à ce que je veux faire.
J'essaie de créer, faute de meilleur terme, "Moving SUMS" pour une variable dans mon cadre de données. Celles-ci seraient des sommes de 3 ans et de 5 ans, à la traîne d'un an. Ainsi, une somme de 5 ans pour une observation en 1986 serait la somme de toutes les observations précédentes en 1981, 1982, 1983, 1983, 1984 et 1985. Voici un exemple de ce que j'aimerais faire, où la variable de somme est la Somme de tous Il s'agit de données de panneaux non équilibrés. Je soupçonne Toute entrée serait appréciée. P> P> x code> au cours des cinq années précédant l'année d'observation. p>
ddply code> serait approprié, mais je ne connais pas le codage exact pour cela. P>
3 Réponses :
Vous pouvez utiliser filtre code> dans
ddply code> (ou toute autre fonction implémentant l'approche "Split-apply-combinez"):
Si qui donne: p> df code> est la trame de données d'entrée à trois colonnes, puis utilisez
AVE code> avec
rollApplyR code> du zoo. Notez que nous utilisons une largeur de
k + 1 code>, puis déposez l'élément K + 1st de la somme de sorte que la valeur actuelle de
x code> est exclue et que le seul code restant > k code> Les valeurs sont additionnées:
Vous pouvez également utiliser pour faire un 1 décalage , insert Si vous utilisez cela fréquemment, P> < Pré> xxx pré> p> filtre code> de packages standard (
statistiques code>) pour déplacer la somme:
na code> au début et prenez le nombre d'éléments (ou lignes): p>
Jetez un coup d'œil à
? Rollsum code> à partir du package code> zoo code>. Combiné avec
agrégat code>,
data.table code> ou
ddply code> vous devez être défini.