On Wed, Aug 1, 2012 at 12:54 PM, Douglas Karabasz <doug...@sigmamonster.com> wrote: > I used quantmod to pull in price data from the ticker SPY. The data has > date and closing price. I would like to show the day of the week for each > closing price. Is that possible? Also, I would like to add the back into > the data frame in a new column without changing the structure of the data > set if possible. > > > > SPY > > 2009-01-02 92.96 > > 2009-01-05 92.85 > > 2009-01-06 93.47 > > 2009-01-07 90.67 > > 2009-01-08 91.04 > > 2009-01-09 89.09 > > > >> str(SP500) > > An 'xts' object from 2009-01-02 to 2012-07-31 containing: > > Data: num [1:902, 1] 93 92.8 93.5 90.7 91 ... > > - attr(*, "dimnames")=List of 2 > > ..$ : NULL > > ..$ : chr "SPY" > > Indexed by objects of class: [Date] TZ: > > xts Attributes: > > List of 4 > > $ tclass : chr [1:2] "POSIXct" "POSIXt" > > $ tzone : chr "" > > $ src : chr "yahoo" > > $ updated: POSIXct[1:1], format: "2012-07-31 17:59:16" >
Hi Doug, No, this isn't quite doable. I'll give a somewhat technical description of why and then I'll propose a work around ---- Technical Stuff --- An "xts" object consists of two fundamental parts -- an index which is numeric (seconds since the epoch usually) and its "coredata" which is, in your case, the prices. The "coredata" is and must be all of the same "type" -- either integer, double, or string; internally, this is because it's all actually a matrix, which is in turn an atomic vector, and to be any sort of performant, we need them all of the same type. So there's no way for the coredata to have the _number_ 24 and the _string_ day of the week "tuesday". We'll come back to this though. So you might ask about the index... xts hard-codes selected index classes to work. None of them currently have printing methods that write out the day of the week like you want, though you could define your own time index and use it in zoo if desired. That's almost certainly overkill though. ---- What to do ---- In light of the above, the easiest thing is probably to encode the day of the week as an integer if you really need it for calculations: as.numeric(factor(strptime(index(x), "%A"))) will create that and then you can cbind() it on. Alternatively, you can cbind() just strptime(index(... on and you will change the coredata() to character. I'd do this instead if you're only looking for human output. Even better on the "just look" pretty front would be to make it into a data.frame for printing only: data.frame(x, `Day of the Week` = strptime(index(x), "%A")) but again -- that's only for printing: it will destroy the "xts"-ness. Best, Michael > > > Thank you, > > Douglas > > > > > [[alternative HTML version deleted]] > > ______________________________________________ > 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. ______________________________________________ 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.