Aufteilen unregelmäßiger Zeitreihen in regelmäßige Monatsmittelwerte - R

Um saisonale Auswirkungen auf den Energieverbrauch zu ermitteln, muss ich die Informationen zum Energieverbrauch, die ich aus einer Abrechnungsdatenbank habe, an die monatlichen Temperaturen anpassen.

Ich arbeite mit einem Abrechnungsdatensatz, der Rechnungen unterschiedlicher Länge sowie Start- und Enddaten enthält, und möchte den monatlichen Durchschnitt für jedes Konto innerhalb eines jeden Monats ermitteln. Ich habe beispielsweise eine Abrechnungsdatenbank mit den folgenden Merkmalen:

   acct amount      begin        end days
1  2242  11349 2009-10-06 2009-11-04   29
2  2242  12252 2009-11-04 2009-12-04   30
3  2242  21774 2009-12-04 2010-01-08   35
4  2242  18293 2010-01-08 2010-02-05   28
5  2243  27217 2009-10-06 2009-11-04   29
6  2243    117 2009-11-04 2009-12-04   30
7  2243  14543 2009-12-04 2010-01-08   35

Ich möchte herausfinden, wie man diese etwas unregelmäßigen Zeitreihen (für jedes Konto) erzwingt, um den durchschnittlichen Betrag pro Tag innerhalb eines jeden Monats zu erhalten, der in jeder Rechnung aufgespannt ist, so dass:

   acct amount      begin        end days avgamtpday
1  2242  11349 2009-10-01 2009-10-31   31          X
2  2242  12252 2009-11-01 2009-11-30   30          X
3  2242  21774 2009-12-01 2010-12-31   31          X
4  2242  18293 2010-01-01 2010-01-31   31          X
4  2242  18293 2010-02-01 2010-02-28   28          X
5  2243  27217 2009-10-01 2009-10-31   31          X
6  2243    117 2009-11-01 2009-11-30   30          X
7  2243  14543 2009-12-01 2009-12-31   30          X
7  2243  14543 2010-01-01 2010-01-31   31          X

Ich bin ziemlich agnostisch gegenüber jedem Tool, das dies tun kann, da ich dies nur einmal tun muss.

Eine zusätzliche Falte ist, dass die Tabelle ungefähr 150.000 Zeilen lang ist, was für die meisten Standards nicht sehr groß ist, aber groß genug, um eine Schleifenlösung in R schwierig zu machen. Ich habe mit den Paketen zoo, xts und tempdisagg in R nachgeforscht. Ich habe angefangen, eine wirklich hässliche Schleife zu schreiben, die jede Rechnung aufteilt, dann für jeden Monat eine Zeile innerhalb einer vorhandenen Rechnung erstellt und dann mit tapply () nach Konten zusammengefasst und Monate, aber ehrlich gesagt, konnten nicht sehen, wie man es effizient macht.

In MySQL habe ich Folgendes versucht:

Ansicht v3 erstellen oder ersetzen als Auswahl 1 n Union alle Auswahl 1 Union alle Auswahl 1;
Ansicht erstellen oder ersetzen v als Auswahl 1 n aus v3 a, v3 b alle auswählen 1;
setze @n = 0;
Tabelle löschen, wenn Kalender vorhanden ist; Tischkalender erstellen (dt Datum Primärschlüssel);
In Kalender einfügen
Besetzung auswählen ('2008-1-1' + Intervall @n: = @n + 1 Tag als Datum) als dt aus v a, v b, v c, v d, v e, v;

Wählen Sie Konto, Betrag, Beginn, Ende, billAmtPerDay, Summe (billAmtPerDay), MonatAmt, Anzahl () Tage, Summe (billAmtPerDay) / Anzahl () AverageAmtPerDay, year (dt), month (dt) FROM (wählen Sie *, amount / days billAmtPerDay von Rechnungen aus b inner join calendar c zwischen begin und end und begin <> dt) x group by acct, amount, begin, end , billAmtPerDay, Jahr (TT), Monat (TT);

Aber aus Gründen, die ich nicht verstehe, mag mein Server diese Tabelle nicht und bleibt beim inneren Join hängen, selbst wenn ich die verschiedenen Berechnungen stufe. Ich untersuche, ob es temporäre Speicherbeschränkungen gibt.

Vielen Dank!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage