Tuesday, 18 April 2017

Gleitender Durchschnittsvektor R

Im ein R Neuling und Im, das eine Menge Mühe hat, etwas zu tun, das vermutlich sehr einfach ist. Ich habe einen großen Datensatz aufgeteilt in Gruppen nach Ländercode, und ich möchte einen dreimonatigen rollenden Durchschnitt von einem Preisindex, nach Land zu nehmen, und dann legte es in eine neue Spalte, die bis zum entsprechenden Monat übereinstimmt. Ich habe versucht, Rollmean wie folgt verwenden, ohne Erfolg (Code-und Fehlermeldungen unten): Jede Hilfe wäre viel geschätzt gefragt Mar 10 12 at 6:42 In Ihrem ersten Versuch verwendet Ihre Funktion nicht ihre x-Argument und immer zurück Die gleiche Sache (ein Vektor mit der falschen Größe). Darüber hinaus sollte das erste Argument, ein Vektor sein. Schließlich liefert tapply eine Liste von Vektoren zurück: Sie können das Ergebnis nicht direkt in ein data. frame setzen. In Ihrem zweiten Beispiel sollte das dritte Argument von plyr eine Funktion sein, kein Ausdruck. Wenn Sie einen Ausdruck verwenden möchten, können Sie summarize oder transform als Funktion verwenden (summarize gibt ein 1-row data. frame für jeden Wert von ccode zurück, während transform die Anzahl der Zeilen unverändert bleibt) und die Ausdrücke als weitere Argumente setzen . Ich habe einen Vektor von Werten, die ich möchte den Durchschnitt in den Fenstern entlang einer kleineren Folie zu berichten. Zum Beispiel für einen Vektor der folgenden Werte: Eine Fenstergröße von 3 und eine Folie von 2 würde folgendermaßen ausführen: Und einen Vektor von diesen Werten zurückgeben: Gibt es eine einfache Funktion, die dies für mich tun wird Wenn es auch die Indizes des Fensters beginnt, dass ein zusätzlicher Bonus wäre. In diesem Beispiel wäre das 1,3,5 mbq, die eine starke Annahme macht, dass die Beobachtung 0 ist. Ich hatte diesen Punkt gemildert und T-Burns macht die gleiche Annahme (eine nicht beobachtete 0). Ich würde es vorziehen, vielleicht mit NA Pad und passieren in der na. rm TRUE Argument zu bedeuten. Die Antwort sei nicht die gleiche wie die OP angefordert, aber es scheint sinnvoller. I39ll bearbeiten meine Antwort auf diese gehören. Ndash Gavin Simpson Ich kann dies leicht in Matlab und Ente, während Sie downvote mich: Als Nebenwirkung ist idx1 der Index des Elements in der Summe. Ich bin sicher, dass dies leicht in R übersetzt werden kann. Das Idiom zuerst: Überspringen: Letztes in Matlab gibt das Array zuerst, firstskip, first2skip. First n überspringen, wobei das letzte Element im Array nicht größer als das letzte ist. Bearbeiten. Ich hatte die Mittelung Teil (dividieren durch windowsize) weggelassen. Wasn39t mich auch nicht, aber wie von Ihnen selbst, Vor-Zuweisung der Ergebnis-Objekt wird mit der Geschwindigkeit Problem zu helfen. Ein Trick, wenn Sie don39t wissen, oder es ist mühsam schwierig zu bestimmen, die Größe der Ergebnis-Objekt, das Sie benötigen. Weisen Sie etwas vernünftig, vielleicht vor-Füllung mit NA. Dann füllen Sie mit Ihrer Schleife, aber fügen Sie einen Scheck, dass, wenn Sie nähern sich die Grenze des vorab zugeordnete Objekt, zuteilen, ein weiteres großes Stück, und füllen Sie weiter. Ndash Gavin Simpson Geschwindigkeit der Ergebnisse, während wichtig, isn39t die einzige Überlegung. Anstatt die Weile neu zu erfinden und alle Indizes usw. in den benutzerdefinierten Lösungen zu behandeln, ist die ein-lineare, die rollapply ist viel einfacher zu verstehen und grep die Absicht von. Auch rollapply ist wahrscheinlich zu haben viele weitere Augäpfel Überprüfung seines Codes als etwas, was ich kochen könnte einen Nachmittag. Pferde für Kurse. Ndash Gavin Simpson Sep 25 10 um 9: 45Moving Averages in R Nach meinem besten Wissen hat R keine integrierte Funktion zur Berechnung der gleitenden Durchschnitte. Mit der Filterfunktion können wir jedoch eine kurze Funktion für gleitende Mittelwerte schreiben: Wir können die Funktion auf beliebigen Daten verwenden: mav (data) oder mav (data, 11), wenn wir eine andere Anzahl von Datenpunkten angeben wollen Als die Standard-5-Plotterarbeiten wie erwartet: plot (mav (data)). Zusätzlich zu der Anzahl der Datenpunkte, über die gemittelt wird, können wir auch das Seitenargument der Filterfunktionen ändern: sides2 verwendet beide Seiten, Seiten1 verwendet nur vergangene Werte. Teilen Sie diese:


No comments:

Post a Comment