2012-12-19 16 views
5

xts (veya hayvanat bahçesi) bir apply.period yaptıktan sonra ne kadar zaman kullandığını anlamaya çalışıyorum. Aşağıdaki düşünün: Tam haftaları zorlama ile 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 

Ben '2012/12/02' anlamına gelir "2012-12-02 biten haftada, toplam 1" düşünüyorum. Yani temelde zaman haftanın sonu.

Ama sorun bu "2012-12-11" ile - ı 11th verildi haftanın son günü olduğunu söylüyor ne yapıyor düşünmek , bu yüzden zaman olarak o veriyor .

Veri setine o gün dahil edilmemiş olsa bile, Pazar günü sona erdirmek için onu zorlamak için herhangi bir yolu var mı?

cevap

3

bu deneyin: Neden

örn Sen akan yapabilirsiniz (belki bir tasarım seçimi benzersiz bir dizin olsun) bilmiyorum nextsunnextfri kodundan türetilmiştir

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

0 (), 5 (Cuma için) ile 0 (Pazar için) değiştirilerek verilir.

3

Bunlar tam haftalardır. Sadece son gözlemin tarihini gösteriyor. Bkz. ?endpoints (apply.weekly, esasen uç noktalar için ince bir sarıcıdır). Kaynaktan

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

? Bitiş noktaları

uç noktaları sıfır vektör başına eklenir ile ilgilidir ile belirtilen her dönemde son gözlem tekabül eden sayısal bir vektör döndürür ve dizin Son gözlem, x'de sonunda. üzerine argüman için

Geçerli değerler şunlardır: “us” (mikrosaniye), “mikrosaniye”, “msn” (milisaniye), “milisaniye”, “sn” (saniye), “saniye”, “dk” (dakika), “dakika”, “saat”, “gün”, “hafta”, “aylar”, “çeyrekler” ve “yıllar”.

İkinci sorunuzun yanıtı hayır, bunun için bir seçenek yok. Ama her zaman el ile son tarihi düzenleyebilirsin, eğer tüm verileri sarılmış olarak sunacak olursan, bende hiçbir zarar görmüyorum.

2

Hayır, pazara vermenizi zorlayamazsınız. period.apply sonuçlarının endeksi

ep <- endpoints(myTs,'weeks') 

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

verilir Çünkü

Yani son tarih kayması gerekir. Maalesef x'ler bu seçeneği sunmuyorsa, endeksin tek bir değerini değiştiremezsiniz.

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