2012-12-19 14 views
5

Próbuję dowiedzieć się, co xts (lub zoo) używa jako czas po wykonaniu apply.period. Rozważ następujące:Wymuszanie całych tygodni z apply.weekly()

> myTs = xts(1:10, as.Date(1:10, origin = '2012-12-1')) 
> apply.weekly(myTs, colSums) 
      [,1] 
2012-12-02 1 
2012-12-09 35 
2012-12-11 19 

Myślę, że "2012-12-02" oznacza "za tydzień kończący się 2012-12-02, suma wynosi 1". Zasadniczo czas upływa pod koniec tygodnia.

Ale problem jest z tym „2012-12-11” - myślę co robi jest powiedzenie, że 11 jest ostatnim dniem tygodnia że dano, więc to daje, że w tym czasie .

Czy istnieje sposób zmuszenia go do wydania niedzieli, w której się kończy, nawet jeśli ten dzień nie został uwzględniony w zestawie danych?

Odpowiedz

3

Spróbuj tego:

nextsun <- function(x) 7 * ceiling(as.numeric(x-0+4)/7) + as.Date(0-4) 
aggregate(myTs, nextsun, sum) 

gdzie nextsun pochodzi z kodu nextfri podana w zoo quick reference przez zamianę 5 (na piątek) na 0 (na niedzielę).

3

To są pełne tygodnie. Pokazuje tylko datę ostatniej obserwacji. Zobacz ?endpoints (apply.weekly, jest zasadniczo cienkim opakowaniu dla punktów końcowych).

apply.weekly 
function (x, FUN, ...) 
{ 
    ep <- endpoints(x, "weeks") 
    period.apply(x, ep, FUN, ...) 
} 
<environment: namespace:xts> 

Od? Punktami końcowymi

punkty końcowe zwraca wektor numeryczny odpowiadający ostatniej obserwacji w każdym okresie określonym przez dnia, z zerem dodany do początku wektora, a indeks ostatnia obserwacja w x przy koniec.

Prawidłowe wartości argumentu na to: „nas” (mikrosekundy), „mikrosekund”, „MS” (ms), „ms”, „sek” (w sekundach), „sekund”, „min” (minuty), "minuty", "godziny", "dni", "tygodnie", "miesiące", "kwartały" i "lata".

Odpowiedź na drugie pytanie brzmi: nie, nie ma opcji, aby to zrobić. Ale zawsze możesz edytować ostatnią datę ręcznie, jeśli masz zamiar przedstawić wszystkie dane opakowane w każdym razie, nie widzę żadnej szkody w nim.

2

Nie, nie możesz zmusić, by dała ci niedzielę.

Ponieważ indeks wyniku period.apply jest przez

ep <- endpoints(myTs,'weeks') 

myTs[ep] 
      [,1] 
2012-12-02 2 
2012-12-09 9 
2012-12-10 10 

Więc trzeba przesunąć ostatnią datę. Niestety xts nie oferują tej opcji, nie można przesunąć pojedynczej wartości indeksu. Nie wiem dlaczego (może wybór projektu uzyskać unikatowy indeks)

np Można zrobić płynącej:

ts.weeks <- apply.weekly(myTs, colSums) 
ts.weeks[length(ts.weeks)] <- last(index(myTs)) + 7-last(floor(diff(ep)))