2013-04-13 9 views
5

Mam obiekt xts z kilkoma wskaźnikami zdarzeń. Muszę podzielić go na pewne zdarzenia, tak aby wszystkie wpisy z danego zdarzenia do następnego zdarzenia były zapisywane w tym samym xts, tworząc ostatecznie listę obiektów xts, z których każda zawiera wydarzenie jako ostatni wpis bez żadnych innych wydarzenia tego samego rodzaju.Podziel obiekt xts według zdarzeń

przykład:

ts = as.Date(Sys.Date()-99:0) 
e1 = numeric(100);e1[10*1:10]=1 
e2 = numeric(100);e2[15*1:6]=1 
y = 1:100 # just a sample content 
xs = as.xts(cbind(e1,e2,y),order.by=ts) 

ee = e1*e2==1 # the event in which both e1 and e2 are 1, should happen at 30,60,90 

# here should be splitting function that gets xs and ee as parameters 
# and should return a list of 4 xts: the first with the entries 1 through 30, 
# the second with entries 31 to 60, the third with entries 61 to 90, and the last 
# with entries 91 to 100 

Twoje sugestie będą bardzo mile widziane.

Odpowiedz

4

Użyj cumsum(ee), aby utworzyć zmienną grupującą, a następnie zadzwoń pod numer split. Musisz wprowadzić niewielką zmianę na wyjściu cumsum, ponieważ chcesz, aby wartości TRUE były ostatnią obserwacją w grupie (a nie pierwszą).

split(xs, c(0,head(cumsum(ee),-1))) 
split(xs,rev(cumsum(rev(ee)))) # grouping factors reversed