2012-06-12 8 views
9

R için çok yeniyim, bu sorunu açıkladığımda herhangi bir terminolojide yanlışlık olursa özür dilerim.Geri Çekme Xts nesnesini kullanarak ayın ilk iş gününden dönüş R

Bir xs nesnesine dönüştürmeyi başarabildiğim bir csv dosyasında bir dizi günlük geri dönüş verisi var.

  HighYield..EUR. MSCI.World..EUR. 
2002-01-31   0.0144   0.0031  
2002-02-01   0.0056   -0.0132  
2002-02-02   0.0373   0.0356  
2002-02-03   -0.0167   -0.0644  
2002-02-04   -0.0062   -0.0332  
2002-02-05   -0.0874   -0.1112 
... 

I (endekste değerler aralığından) ayın ilk iş gününde bulmak ve sonra yeni XTS yaratacak bir komut dosyası oluşturmak istediğiniz bu getiriler ile nesne: veri formatında olduğu içinde.

  HighYield..EUR. MSCI.World..EUR. 
2002-01-31   0.0144   0.0031  
2002-02-28   0.0011   -0.0112  
2002-03-31   0.0222   0.0224  
2002-04-30   -0.0333   -0.0223  
2002-05-30   -0.0011   -0.0012  
2002-06-30   -0.0888   -0.0967 
... 

Birisi bana lütfen yardımcı olabilir:

Örneğin, komut çalıştırıldıktan sonra formatında bir XTS nesne var ki? ve mümkünse, komut dosyasının her bir parçasının ne yaptığını açıklayın. Baz R dilinin gücüne

+0

Sizin örnekte, her geçen gün gösterir ay, ama önemi yok. Belirli tarihleri ​​(kuklalar) kadar (pseudocode) '(ay (dateval [i]> ay (dateval [i-1]) sonra {bu i-th sırasını çıktıya kopyala}' gibi bir yere çekmenin birçok yolu vardır. Yararlı tarihle ilgili işlevler için 'lubridate' paketine bir göz atabilirsiniz: –

cevap

11

sayesinde, tek satırda yapabilirsiniz:

library(xts) 
data(sample_matrix) 
x <- as.xts(sample_matrix) 
do.call(rbind, lapply(split(x, "months"), first)) 

her adımın ne yaptığını açıklamak için:

# Split the xts object into a list with an element for each month. 
x1 <- split(x, "months") 
# Loop over the list (x1) and call the first() function on each element. 
# This returns a new list where each element only contains the first observation 
# from each respective element in x1. 
x2 <- lapply(x1, first) 
# Call rbind() with all the elements of x2 as arguments to rbind() 
# Same as rbind(x2[[1]], x2[[2]], ..., x2[[N]]) 
x3 <- do.call(rbind, x2) 
+0

Joshua, sen bir bilgin ve bir beyefendisin, ben senin borcundayım – GreenyMcDuff

+0

" İlk iş günü "kelimesinin tam anlamıyla münhasır olduğunu varsayarsak Cumartesileri ve Pazarları kullanmamalıyız. Do.call (rbind, lapply (bölünmüş (x (.indexwday (x)% 'si% 1: 5, "ay"), ilk)) Bunu yapmak için "xts" ile daha iyi bir yol? – A5C1D2H2I1M1N2O1R2T1

+0

@mrdwab: evet, bu iyi bir nokta. Benim cevabım nesnenin sadece iş günlerini içerdiğini varsayar. Seninki daha iyi, ama yine de potansiyel tatilleri hariç tutmaz. [timeDate] (http://cran.r-project.org/web/packages/timeDate/index.html) paketinin bunun için iyi işlevleri var: –