[R-SIG-Finance] zoo: bug / feature replacing coredata - subsetting by dates

Phil Joubert philjoubert at yahoo.com
Fri Apr 24 15:49:04 CEST 2009

Hi all

I'm using RBloomberg to download some price and dividend data. I want to construct a time series of total returns, so I need to add the dividends to the price data before taking log returns. My problem is that I obtain very strange behaviour when I try to change a subset of one zoo object (prices) using the indices of the other (dividends).

Any ideas, or smarter ways to achieve this?

#   Connect Bloomberg
oBbgConn <- blpConnect(show.days="trading"

dtStart <- chron("31/12/1988", format="d/m/y")
dtEnd <- chron("31/12/2008", format="d/m/y"))
vdPrices <- blpGetData(oBbgConn, sTicker, "PX_LAST", dtStart, dtEnd)

# BBG gives dividend data as an awkward table, convert it to a zoo with XD dates and dividend amounts
vdDividends <- unlist(blpGetData(oBbgConn, sTicker, "DVD_HIST", retval="raw"))
cnstszDivColumns <- 7
szDividends <- length(vdDividends) / cnstszDivColumns
dim(vdDividends) <- c(szDividends, cnstszDivColumns)
vdDividends <- merge(zoo(as.numeric(vdDividends[,5]), as.chron(vdDividends[,2])), all=FALSE)

vdPricesPlusDivs <- vdPrices

#This line returns the expected values
coredata(vdPricesPlusDivs[index(vdPrices + vdDividends)])

#This should replace the coredata with the sum of the price + div for XD dates only
coredata(vdPricesPlusDivs[index(vdPrices + vdDividends)]) <- coredata(vdPrices + vdDividends)


#but it does not - it adds in approximately length(vdPrices* vdDividends) NA's to the coredata vector without changing the index vector, and puts the new values at the end. The zoo object vdPricesPlusDivs is now unusable.

I suspect this is an issue with date/index handling at some point - if I create dummy timeseries using integers as index variables I cannot replicate the problem. I'm working on a Windows box.

Any help or ideas appreciated!

More information about the R-SIG-Finance mailing list