I think the following does what you want:

> (d <- structure(c(6586, 6586, 6589, 6593, 6593, 6593, 6598, 6598, 6598,
6598), class = "Date"))
 [1] "1988-01-13" "1988-01-13" "1988-01-16" "1988-01-20" "1988-01-20"
"1988-01-20" "1988-01-25"
 [8] "1988-01-25" "1988-01-25" "1988-01-25"
> (td <- table(d))
d
6586 6589 6593 6598 
   2    1    3    4 
> names(td) <- as.Date(as.numeric(names(td)))  # to make the names more
readable
> print(td)
1988-01-13 1988-01-16 1988-01-20 1988-01-25 
         2          1          3          4 
>  

HTH,

Tobias

>-----Original Message-----
>From: [EMAIL PROTECTED] 
>[mailto:[EMAIL PROTECTED] On Behalf Of antonio 
>rodriguez
>Sent: 02 November 2006 09:58 AM
>To: Gabor Grothendieck
>Cc: R-Help
>Subject: Re: [R] subsetting, aggregating and zoo
>
>Dear Gabor,
>
>The solution below was very useful for me, but I have, I hope, 
>one last question about extracting some specific data. How to 
>count , from below, the number of times a date is repeated, that is:
>
>starts
>
>[1] "1988-01-13" "1988-01-13" "1988-01-16" "1988-01-20" "1988-01-20"
>[6] "1988-01-20" "1988-01-25" "1988-01-25" "1988-01-25" "1988-01-25"
>
>dput(starts[1:10], control = "all")
>structure(c(6586, 6586, 6589, 6593, 6593, 6593, 6598, 6598, 
>6598, 6598), class = "Date")
>
>So I need to know how many times, for example, "1988-01-03" is 
>repeated (in this case, 2 times) Can't find what function to use.
>
>Best regards,
>
>Antonio
>
>
>
>
>Gabor Grothendieck escribió:
>> Sorry, the line starting idx <- should have time(z) in place of z.
>> That is,
>>
>> year <- as.Date(c(
>> "1988-01-13", "1988-01-14", "1988-01-16", "1988-01-20", 
>"1988-01-21", 
>> "1988-01-22", "1988-01-25", "1988-01-26", "1988-01-27", 
>"1988-01-28"))
>>
>> x <- c(
>> 7.973946,  9.933518,  7.978227,  7.512960,  6.641862,  5.667780, 
>> 5.721358,
>> 6.863729,   9.600000,   9.049846)
>>
>> z <- zoo(x, year)
>>
>> idx <- cumsum(c(1, diff(time(z)) != 1))
>>
>> starts <- time(z)[match(idx, idx)]
>> ends <- time(z)[cumsum(table(idx))[idx]]
>>
>> aggregate(z, starts, mean)
>>
>>
>> By the way, dput(v, control = "all") will output variable v 
>in a form 
>> easily pastable by someone else into their session.
>>
>> On 10/29/06, antonio rodriguez <[EMAIL PROTECTED]> wrote:
>>> Gabor Grothendieck escribió:
>>> > Try this:
>>> >
>>> > # test data
>>> > x <- c(1:4, 6:8, 10:14)
>>> > z <- zoo(x, as.Date(x))
>>> >
>>> > # idx is 1 for first run, 2 for second run, etc.
>>> > idx <- cumsum(c(1, diff(z) != 1))
>>> >
>>> > # starts replaces each time with the start time of that 
>run # ends 
>>> > is similar but for ends starts <- time(z)[match(idx, 
>idx)] ends <- 
>>> > time(z)[cumsum(table(idx))[idx]]
>>> >
>>> > # average over each run using the time of the end of run for the
>>> result
>>> > # replace ends with starts if that is preferred 
>aggregate(z, ends, 
>>> > mean)
>>> >
>>> Yes it's OK in your example, but when I try to do it with my data I 
>>> don't get the same figure.
>>>
>>> is.zoo(z)
>>> [1]TRUE
>>>
>>> atributes(z)
>>> $index
>>>   [1] "1988-01-13" "1988-01-14" "1988-01-16" "1988-01-20" 
>"1988-01-21"
>>> 
>...............................................................
>................................... 
>>>
>>> [3861] "2005-12-20" "2005-12-23" "2005-12-24" "2005-12-25" 
>"2005-12-26"
>>> [3866] "2005-12-27" "2005-12-30"
>>>
>>> $class
>>> [1] "zoo"
>>>
>>> z[1:10]
>>>
>>> 1988-01-13 1988-01-14 1988-01-16 1988-01-20 1988-01-21 1988-01-22
>>> 1988-01-25
>>>  7.973946   9.933518   7.978227   7.512960   6.641862   5.667780   
>>> 5.721358
>>> 1988-01-26 1988-01-27 1988-01-28
>>>  6.863729   9.600000   9.049846
>>>
>>> If I follow your instructions,
>>>
>>> idx <- cumsum(c(1, diff(z) != 1))
>>> starts <- time(z)[match(idx, idx)]
>>> ends <- time(z)[cumsum(table(idx))[idx]]
>>>
>>> s1 <- aggregate(z, starts, mean)
>>> s1[1:10]
>>>
>>> 1988-01-13 1988-01-14 1988-01-16 1988-01-20 1988-01-21 1988-01-22
>>> 1988-01-25
>>>  7.973946   9.933518   7.978227   7.512960   6.641862   5.667780   
>>> 5.721358
>>> 1988-01-26 1988-01-27 1988-01-28
>>>  6.863729   9.600000   9.049846
>>>
>>> s2 <- aggregate(z, starts, mean)
>>> s2[1:10]
>>>
>>> 1988-01-13 1988-01-14 1988-01-16 1988-01-20 1988-01-21 1988-01-22
>>> 1988-01-25
>>>  7.973946   9.933518   7.978227   7.512960   6.641862   5.667780   
>>> 5.721358
>>> 1988-01-26 1988-01-27 1988-01-28
>>>  6.863729   9.600000   9.049846
>>>
>>>
>>> Always the same. Don't know why (there are not NA's in the series)
>>>
>>> Antonio
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
>
>______________________________________________
>R-help@stat.math.ethz.ch mailing list
>https://stat.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide 
>http://www.R-project.org/posting-guide.html
>and provide commented, minimal, self-contained, reproducible code.
>

********************
Nedbank Limited Reg No 1951/000009/06. The following link displays the names of 
the Nedbank Board of Directors and Company Secretary. [ 
http://www.nedbank.co.za/terms/DirectorsNedbank.htm ]
This email is confidential and is intended for the addressee only. The 
following link will take you to Nedbank's legal notice. [ 
http://www.nedbank.co.za/terms/EmailDisclaimer.htm ]
********************

        [[alternative HTML version deleted]]

______________________________________________
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to