I have an XTS timeseries in R of the following format and am trying to do some processing, subsetting and re-arranging before exporting as a CSV for work in another program.
You can convert an xts object to a data.frame that includes the index as a column named "Index" with zoo::fortify.zoo().
You don't need ggplot2, but this will still work if you have xts (or zoo) and ggplot2 loaded.
For example:
library(xts)
data(sample_matrix)
x <- as.xts(sample_matrix, dateFormat = "Date")
my_df <- fortify.zoo(x)
head(my_df)
# Index Open High Low Close
# 1 2007-01-02 50.03978 50.11778 49.95041 50.11778
# 2 2007-01-03 50.23050 50.42188 50.23050 50.39767
# 3 2007-01-04 50.42096 50.42096 50.26414 50.33236
# 4 2007-01-05 50.37347 50.37347 50.22103 50.33459
# 5 2007-01-06 50.24433 50.24433 50.11121 50.18112
# 6 2007-01-07 50.13211 50.21561 49.99185 49.99185
str(my_df)
# 'data.frame': 180 obs. of 5 variables:
# $ Index: Date, format: "2007-01-02" "2007-01-03" ...
# $ Open : num 50 50.2 50.4 50.4 50.2 ...
# $ High : num 50.1 50.4 50.4 50.4 50.2 ...
# $ Low : num 50 50.2 50.3 50.2 50.1 ...
# $ Close: num 50.1 50.4 50.3 50.3 50.2 ...