[R-SIG-Finance] merge zoo with many entries per date with lagged self using ticker

Gabor Grothendieck ggrothendieck at gmail.com
Sun Nov 14 19:09:43 CET 2010


On Sun, Nov 14, 2010 at 12:52 PM, richard.c.herron at gmail.com
<richard.c.herron at gmail.com> wrote:
> OK, I'm learning :). With more tinkering I found that the zoo lag operator
> lags by rows, not by time stamps, so it fails if there are multiple entries
> per time stamp. I may be forced to switch to data frame, perform the
> following operation, then switch back to zoo.
> Here is the manual coding of the operation I'd like (with a small data
> frame) to do all in the zoo class (or some other time series):
>> # create a zoo multiple symbols per month
>> temp <- data.frame(date=rep(200808:200811, each=3),
>> symbol=rep(letters[1:3], times=4), ret=1:12)
>> # find unique date entries
>> unique.date <- unique(temp$date)
>> # shift the date num.lags to match future performance with current
>> stock/date
>> num.lags <- 1
>> temp.lag <- temp[which(temp$date > unique.date[num.lags]), ]
>> for (i in seq(num.lags+1, length(unique.date), 1)) {
> +     temp.lag$date[which(temp.lag$date==unique.date[i])] <-
> unique.date[i-num.lags]
> + }
>> # merge
>> temp.merged <- merge(temp, temp.lag, by=c("date", "symbol"),
>> suffixes=c(".now", ".next"))
>> temp.merged
>     date symbol ret.now ret.next
> 1 200808      a       1        4
> 2 200808      b       2        5
> 3 200808      c       3        6
> 4 200809      a       4        7
> 5 200809      b       5        8
> 6 200809      c       6        9
> 7 200810      a       7       10
> 8 200810      b       8       11
> 9 200810      c       9       12
>

zoo series are time series and time series are functions of time so
you can't have multiple times that are the same (or else it would not
be a function). See zoo FAQ #1
vignette("zoo-faq")

Normally in zoo you would represent your data in wide form rather than
long form in which case there is no problem:

> library(zoo)
> f <- function(x) as.yearmon(as.character(x), "%Y%m")
> z <- read.zoo(temp, split = "symbol", FUN = f)
> lag(z, 0:1)
         a.lag0 b.lag0 c.lag0 a.lag1 b.lag1 c.lag1
Aug 2008      1      2      3      4      5      6
Sep 2008      4      5      6      7      8      9
Oct 2008      7      8      9     10     11     12
Nov 2008     10     11     12     NA     NA     NA

-- 
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com



More information about the R-SIG-Finance mailing list