Wenn Ihre Daten groß sind, sollten Sie diese Lösung mit data.table
ausprobieren. Es ist ziemlich schnell. Wenn Sie mehr Geschwindigkeit benötigen, können Sie mapply
immer zu mcmapply
ändern und mehrere Kerne verwenden.
Das von OP bereitgestellte Dataset macht die Komplexität der Aufgabe nicht verfügbar. In Bezug auf die Adressierung der OP-Frage war bisher nur Mikes Antwort die richtige.
In der Tat für eine 8 rollende Tage, anstatt 7 rollende Tage, wegen d <= 0 & d >= -7
.
zoo
solution by @G. Grothendieck ist fast gültig, nur wenn merge
für jede Gruppe von ID
vergeben wird.
Unterhalb der zweiten data.table-Lösung gilt diese Zeit als gültig, wenn dev RcppRoll verwendet wird, die na.rm=TRUE
erlaubt.
Und etwas formatierte Mikes Lösungsausgabe.
Ich freue mich auf ein Update von @Khashaa.
Timing auf einem größeren (immer noch sehr kleinen) Datensatz, 5439 Zeilen:
%Vor%Ich bin mir aber nicht sicher, ob mein data.table-Code bereits optimal ist.
Die obigen Funktionen haben die OP-Frage nicht beantwortet. Lesen Sie den Anfang des Posts zum Aktualisieren. Mikes Lösung war die richtige.
1) Angenommen, Sie meinen jede aufeinanderfolgende Überlappung von 7 Zeilen für diese ID:
%Vor%2) Wenn Sie wirklich 7 Tage und nicht 7 Zeilen meinen, dann versuchen Sie Folgendes:
%Vor%Aktualisiert Hinzugefügt (2) und einige Verbesserungen vorgenommen.
Tags und Links r data.table xts