Convert zoo to dataframe

I converted a zoo time series to a data frame in R , and the date became the index of the data frame. Is there a way to specify a date represented as a normal column in a data frame?

 monthly_df <- data.frame(monthly_zoo) head(monthly_zoo) 

zoo output

 head(monthly_df) 

dataframe output

+5
source share
2 answers

You want as.data.frame() . Witness:

 R> library(quantmod) Loading required package: xts Loading required package: TTR Version 0.4-0 included new data defaults. See ?getSymbols. R> IBM <- as.zoo(getSymbols("IBM")) # convert from xts R> class(IBM) [1] "zoo" R> tail(IBM) IBM.Open IBM.High IBM.Low IBM.Close IBM.Volume IBM.Adjusted 2016-10-11 156.73 156.95 153.89 154.79 2901300 154.79 2016-10-12 154.97 154.97 153.08 154.29 2964000 154.29 2016-10-13 153.70 154.22 152.27 153.72 2909900 153.72 2016-10-14 154.47 155.53 154.09 154.45 4358200 154.45 2016-10-17 154.45 155.89 154.34 154.77 5890400 154.77 2016-10-18 150.02 151.00 147.79 150.72 12705700 150.72 R> as.data.frame(tail(IBM)) IBM.Open IBM.High IBM.Low IBM.Close IBM.Volume IBM.Adjusted 2016-10-11 156.73 156.95 153.89 154.79 2901300 154.79 2016-10-12 154.97 154.97 153.08 154.29 2964000 154.29 2016-10-13 153.70 154.22 152.27 153.72 2909900 153.72 2016-10-14 154.47 155.53 154.09 154.45 4358200 154.45 2016-10-17 154.45 155.89 154.34 154.77 5890400 154.77 2016-10-18 150.02 151.00 147.79 150.72 12705700 150.72 R> class(as.data.frame(tail(IBM))) [1] "data.frame" R> 

To add a date as a column (instead of relying on the default growth names), make it explicit:

 R> IBM <- getSymbols("IBM") # keep as xts R> tail(data.frame(index(IBM), as.data.frame(IBM))) index.IBM. IBM.Open IBM.High IBM.Low IBM.Close IBM.Volume IBM.Adjusted 2016-10-11 2016-10-11 156.73 156.95 153.89 154.79 2901300 154.79 2016-10-12 2016-10-12 154.97 154.97 153.08 154.29 2964000 154.29 2016-10-13 2016-10-13 153.70 154.22 152.27 153.72 2909900 153.72 2016-10-14 2016-10-14 154.47 155.53 154.09 154.45 4358200 154.45 2016-10-17 2016-10-17 154.45 155.89 154.34 154.77 5890400 154.77 2016-10-18 2016-10-18 150.02 151.00 147.79 150.72 12705700 150.72 R> 
+6
source

fortify.zoo(z) converts the zoo z object to data.frame with the first column equal to the index.

 library(zoo) z <- zoo(1:3, as.Date("2000-01-01") + 0:2) # test object fortify.zoo(z) 

giving:

  Index z 1 2000-01-01 1 2 2000-01-02 2 3 2000-01-03 3 

If ggplot2 loaded (so fortify generic is present), then it can be written one by one as:

 library(ggplot2) fortify(z) 
+4
source

Source: https://habr.com/ru/post/1258441/


All Articles