Here is one possibility using aggregate.zoo
> aggregate(z, as.yearmon, tail, 1)
x1 x2 x3 x4 x5 x6
Aug 1998 -0.07043759 NA NA NA NA NA
Sep 1998 -0.03098945 NA NA NA NA NA
Oct 1998 -0.00726802 NA NA NA NA NA
The above is not strictly what you asked for since it uses yearmon
times. Here is another solution in which we create a new zoo object
of sequential indexes and then extract the aggregated indexes from z.
This also uses aggregate.zoo:
> tt <- time(z)
> ix <- coredata(aggregate(zoo(seq_along(tt), tt), as.yearmon, tail, 1))
> z[ix, ]
x1 x2 x3 x4 x5 x6
1998-08-31 -0.07043759 NA NA NA NA NA
1998-09-30 -0.03098945 NA NA NA NA NA
1998-10-23 -0.00726802 NA NA NA NA NA
Here is one that uses aggregate from the core of R rather than aggregate.zoo:
> tt <- time(z)
> ix <- aggregate(seq_along(tt), list(as.yearmon(tt)), tail, 1)$x
> z[ix, ]
x1 x2 x3 x4 x5 x6
1998-08-31 -0.07043759 NA NA NA NA NA
1998-09-30 -0.03098945 NA NA NA NA NA
1998-10-23 -0.00726802 NA NA NA NA NA
On Wed, Nov 11, 2009 at 10:06 AM, Research <risk2009 at ath.forthnet.gr>
wrote:> Dear R-users,
>
> I have the following zoo object:
>
> ? ? ? ? ? x1 ? ? ? ? ? ? ? ? ? ?x2 ? ? ? ? ?x3 ? ? ? ? ? x4 ? ? ? ? ? x5
> ? ? x6
> 1998-08-31 -0.0704375904 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-09-01 ?0.0379028122 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> 0.00609139
> 1998-09-02 -0.0038191639 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-09-03 -0.0083235389 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-09-04 -0.0085576782 ? ? ? ? ?NA ? ? ? ? ?NA 0.0028570541 ? ? ? ? ? NA
> ? ? ? NA
> 1998-09-07 ?0.0000000000 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-09-08 ?0.0496459618 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-09-09 -0.0170081847 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-09-10 -0.0261897076 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-09-11 ?0.0290280530 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-09-14 ?0.0202677162 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-09-15 ?0.0077005314 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-09-16 ?0.0074886581 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA -0.002710978
> ? ? ? NA
> 1998-09-17 -0.0257819401 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-09-18 ?0.0011966887 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-09-21 ?0.0037182403 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-09-22 ?0.0055904154 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-09-23 ?0.0347982355 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-09-24 -0.0221650663 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-09-25 ?0.0019449387 ? ? ? ? ?NA 0.007833611 ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-09-28 ?0.0037641439 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-09-29 ?0.0003146288 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-09-30 -0.0309894451 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-10-01 -0.0305704149 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> 0.00000000
> 1998-10-02 ?0.0163000909 -0.03409975 ? ? ? ? ?NA 0.0004991463 ? ? ? ? ? NA
> ? ? ? NA
> 1998-10-05 -0.0141025660 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-10-06 -0.0040240279 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-10-07 -0.0142284540 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-10-08 -0.0116470759 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-10-09 ?0.0256723791 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-10-12 ?0.0134404929 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-10-13 -0.0029209410 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-10-14 ?0.0107283327 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-10-15 ?0.0408820605 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-10-16 ?0.0084890073 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ?0.006675831
> ? ? ? NA
> 1998-10-19 ?0.0056352536 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-10-20 ?0.0014485122 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-10-21 ?0.0056142800 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-10-22 ?0.0079687631 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
> 1998-10-23 -0.0072680217 ? ? ? ? ?NA ? ? ? ? ?NA ? ? ? ? ? NA ? ? ? ? ? NA
> ? ? ? NA
>>
>
>
> I need to create second one which contains the end of each month rows only.
> Is there an easy way of doing this? The data starts at 1998-08-31 and ends
> at 2009-11-06.
>
> Many thanks in advance,
> Costas