Skip to content

Automatic creation of columns in zoo object

5 messages · Gabor Grothendieck, Sergey Goriatchev

#
Hello, everyone

I have a question.

Assume I have the following zoo object:

me.la <- structure(c(1524.75, 1554.5, 1532.25, 1587.5, 1575.25, 1535.5,
1550, 1493.5, 1492.5, 1472.25, 1457.5, 1442.75, 1399, 1535.75,
1565.25, 1543.5, 1598.5, 1586.5, 1547, 1561.5, 1504.75, 1503.75,
1483.75, 1468.75, 1453.75, 1410, 1546.75, 1575.25, 1554, 1609,
1597.5, 1558.5, 1573, 1516.25, 1515.5, 1495, 1480, 1465, 1421.25,
1561.5, 1590, 1568.75, 1623.5, 1612, 1573, 1587.5, 1530.5, 1530,
1509.75, 1494.5, 1479.5, 1435.75, 1573.5, 1601.5, 1580.25, 1635,
1623.5, 1584.5, 1599, 1541.75, 1541.5, 1521.5, 1506, 1491, 1447.25,
1585.5, 1613, 1591.75, 1646, 1634.5, 1595.5, 1610, 1552.75, 1552.75,
1532.75, 1517, 1502, 1458.25, 1600, 1627.5, 1606.5, 1660, 1649,
1609.75, 1624.25, 1567, 1567, 1547, 1531, 1516, 1472.25, 1612,
1639.5, 1618.25, 1671.5, 1661, 1621.5, 1635.75, 1578, 1578, 1558,
1542, 1527, 1483.5), .Dim = c(13L, 8L), index = structure(c(14245,
14246, 14249, 14250, 14251, 14252, 14253, 14256, 14257, 14258,
14259, 14260, 14263), format = "m/d/y", origin = structure(c(1,
1, 1970), .Names = c("month", "day", "year")), class = c("dates",
"times")), class = "zoo", .Dimnames = list(NULL, c("LA1 COMDTY",
"LA2 COMDTY", "LA3 COMDTY", "LA4 COMDTY", "LA5 COMDTY", "LA6 COMDTY",
"LA7 COMDTY", "LA8 COMDTY")))

I also have a following variable (used in RBloomberg) in my environment:

me.la.tickers <- c("LA1 Comdty", "LA2 Comdty", "LA3 Comdty", "LA4
Comdty", "LA5 Comdty", "LA6 Comdty", "LA7 Comdty", "LA8 Comdty")

What I need to do is to automate the following manual piece of code:

me.la$LA2tr <- 0
me.la$LA3tr <- 0
me.la$LA4tr <- 0
me.la$LA5tr <- 0
me.la$LA6tr <- 0
me.la$LA7tr <- 0
me.la$LA8tr <- 0

Basically, I need to automatically create new columns in futures
object taking first part of names in me.la.tickers.

I tried with paste() and assign() combination, but could not get.

I could do the manual part, of course, it does not take much time, but:

1) I want to learn how to automatically create new columns in zoo objects
2) I have many more variables that have to be treated similarly (that
is, I have me.lp with corresponding me.lp.tickers, me.qc with
me.qc.tickers, etc. Then I have a bunch of variables starting with
"en", like en.co and en.cl, and corresponding ticker vectors, then
"ag" variables and "so" variables, as well). I have all in all 24 zoo
variables with 24 corresponding ticker vectors, and for each a
corresponding ticker vector, and for each zoo variable I need to
create 7 extra columns. That would take much time to do manually, and
a lot of code.

How would I do this automatically, please?

Thank you in advance for your help!

Regards,
Sergey
#
Not sure why you need to have all these extra columns if they are only
zero anyways.  Could you not append them when you get data for them?
Are these placeholders really of any value?  At any rate its done using
cbind or merge like this:

library(zoo)
library(chron)

nms <- sub(".Comdty", "tr", me.la.tickers)
zeromat <- matrix(0, nrow(me.la), length(nms), dimnames = list(NULL, nms))
cbind(me.la, zeromat)

In this case zeromat and me.la have the same dimensions so we could
alternately reduce it to this slightly briefer code:

zeromat <- 0 * me.la
colnames(zeromat) <- sub(".Comdty", "tr", me.la.tickers)
cbind(me.la, zeromat)
On Tue, Feb 3, 2009 at 8:44 AM, Sergey Goriatchev <sergeyg at gmail.com> wrote:
#
Dear Gabor,

Yes, these extra columns are of value as I later write code that fills
in those columns row by row conditional on some event taking place,
and when there is no event there should be zero in a particular cell.
BIG thanks for the quick reply. I will try the code out right away!

Kind Regards,
Sergey


On Tue, Feb 3, 2009 at 15:05, Gabor Grothendieck
<ggrothendieck at gmail.com> wrote:

  
    
#
It works perfectly!
Thank you, Gabor, for the quick solution and for letting me learn
sub() function. Supreme! :-)

Regards,
Sergey


On Tue, Feb 3, 2009 at 15:05, Gabor Grothendieck
<ggrothendieck at gmail.com> wrote:

  
    
#
That's not really in the spirit of R.  Normally one works with
whole objects at a time.  You might wish to rethink your
entire approach to this.
On Tue, Feb 3, 2009 at 9:11 AM, Sergey Goriatchev <sergeyg at gmail.com> wrote: