Een langere objectlengte is geen veelvoud van een kortere objectlengte?

Ik begrijp niet waarom R me een waarschuwing geeft over “Een langere objectlengte is geen veelvoud van een kortere objectlengte”

Ik heb dit object dat wordt gegenereerd door een aggregatie uit te voeren over een xts-reeks en de mediaan van de weekdag te geven:

u <- aggregate(d, list(Ukedag = format(index(d),"%w")), median)
1 314.0
2 282.5
3 270.0
4 267.0
5 240.5

Vervolgens probeer ik dit toe te passen op mijn originele xts-serie, die er zo uitziet (alleen veel langer)

head(d)
2009-01-02 116
2009-01-05 256
2009-01-06 286

Gebruik:

coredata(d) <- coredat(d) - u[format(index(d),"%w")];

Wat resulteert in een waarschuwing.

De bedoeling is om het gemiddelde van de weekdag af te trekken. Ondanks de waarschuwing lijkt het te werken, maar waar moet ik me zorgen over maken?

Herziene oplossing: poging 2

apply.daily(d, function(x) coredata(x) - u[format(index(x), "%w")] )

Ik heb inderdaad een ernstige fout gemaakt. Dit geeft geen waarschuwingen en ik heb het getest door het volgende te doen:

apply.daily(d, function(x) u[format(index(x), "%w")] )

Vervolgens het controleren van enkele datums, bleek het in lijn te zijn met de kalender.


Antwoord 1, autoriteit 100%

Ja, dit is iets waar u zich zorgen over moet maken. Controleer de lengte van je objecten met nrw(). R kan objecten automatisch repliceren zodat ze dezelfde lengte hebben als ze verschillen, wat betekent dat je mogelijk bewerkingen uitvoert op niet-overeenkomende gegevens.

In dit geval heb je een duidelijke fout doordat je geaggregeerde gegevens aftrekt van onbewerkte gegevens. Deze zullen zeker van verschillende lengte zijn. Ik stel voor dat je ze samenvoegt als tijdreeksen (met behulp van de datums), dan locf(), en dan je aftrekking doet. Voeg ze anders samen door de oorspronkelijke datums af te kappen tot hetzelfde interval als de geaggregeerde reeks. Wees gewoon heel voorzichtig dat je geen observaties laat vallen.

Ten slotte, als een algemeen advies als je begint: kijk naar het resultaat van je berekeningen om te zien of ze kloppen. U kunt ze zelfs in een spreadsheet opnemen en de resultaten repliceren.

Other episodes