Try this for the first question:

neighborapply <- function(z, width, FUN) {
        out <- z
        ix <- seq_along(z)
        jx <- findInterval(time(z) + width, time(z))
        out[] <- mapply(function(i, j) FUN(c(0, z[seq(i+1, length = j-i)])), 
ix, jx)
        out
}

# test - corrected :948 in last line

library(zoo)
library(chron)

Lines <- "Time                              x
10:00:00.021                20
10:00:00.224                20
10:00:01.002                19
10:00:02.948                20"

z <- read.zoo(textConnection(Lines), header = TRUE, FUN = times)

neighborapply(z, times("00:00:02"), sum)

# and here is an alternative neighborapply
# using loops.  The non-loop solution does
# have the disadvantage that it does as
# readily extend to other situations which
# is why we add this second solution to
# the first question.

neighborapply <- function(z, width, FUN) {
        out <- z
        tt <- time(z)
        for(i in seq_along(tt)) {
                for(j in seq_along(tt)) {
                        if (tt[j] - tt[i] > width) break
                }
                if (j == length(tt) && tt[j] - tt[i] <= width) j <- j+1
                out[i] <- FUN(c(0, z[seq(i+1, length = j-i-1)]))
        }
        out
}

The second question can be answered along the lines
of the first by modifying neighborapply in the loop solution
appropriately.

On Sun, Aug 30, 2009 at 9:38 PM, R_help Help<rhelp...@gmail.com> wrote:
> Hi,
>
> I have a couple of aggregation operations that I don't know how to
> accomplish. Let me give an example. I have the following irregular
> time series
>
> time                              x
> 10:00:00.021                20
> 10:00:00.224                20
> 10:00:01.002                19
> 10:00:02:948                20
>
> 1) For each entry time, I'd like to get sum of x for the next 2
> seconds (excluding itself). Using the above example, the output should
> be
>
> time                        sumx
> 10:00:00.021                39
> 10:00:00.224                19
> 10:00:01.442                20
> 10:00:02:948                 0
>
> 2) For each i-th of x in the series, what's the first passage time to
> x[i]-1. I.e. the output should be
>
> time                           firstPassgeTime
> 10:00:00.021                0.981
> 10:00:00.224                0.778
> 10:00:01.442                NA
> 10:00:02:948                NA
>
> Is there any shortcut function that allows me to do the above? Thank you.
>
> adschai
>
> _______________________________________________
> r-sig-fina...@stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
> -- Subscriber-posting only.
> -- If you want to post, subscribe first.
>

______________________________________________
R-help@r-project.org 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