I have a matrix which represents the eigenvalues of a bunch of correlation matrices over time.
My matrix has a column with the time referenced in it but it's not a time series or an xts object as far as I can tell.
Ultimately I wish to convert this matrix into a format be it data frame or xts object which allows me to plot the N largest eigenvalues over time.
How can I convert this matrix into such a format, I guess XTS is preferable since it is a time series representation?
I have tried the following but I can't get it to work:
time.index <- as.POSIXct(colnames(eigen))
eigenXTS <- as.xts(eigen, order.by = time.index)
but I got an error back referring to
Error in xts(x, order.by = order.by, frequency = frequency, ...) :
NROW(x) must match length(order.by)
My data looks as follows:
> class(eigen)
[1] "matrix"
> str(eigen)
num [1:12, 1:1334] 4.461 2.292 2.216 1.425 0.839 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:1334] "2017-01-20 18:45:00" "2017-01-20 19:00:00" "2017-01-20 19:15:00" "2017-01-20 19:30:00" ...
> dim(eigen)
[1] 12 1334
> eigen[1:4,1:4]
2017-01-20 18:45:00 2017-01-20 19:00:00 2017-01-20 19:15:00 2017-01-20 19:30:00
[1,] 4.461059 4.774866 4.658013 4.841987
[2,] 2.291520 2.330239 2.101630 2.145122
[3,] 2.215749 2.183941 1.935904 1.861954
[4,] 1.424662 1.277794 1.750168 1.762004
Can anyone point me in the direction of how to best approach solving this problem?
as.xts
expects the rownames
of the matrix to be the timestamps. In your case, the colnames
of eigen
contain the timestamps. Therefore, you need to transpose eigen
before calling as.xts
.
xeigen <- as.xts(t(eigen))
xeigen
# [,1] [,2] [,3] [,4]
# 2017-01-20 18:45:00 4.461059 2.291520 2.215749 1.424662
# 2017-01-20 19:00:00 4.774866 2.330239 2.183941 1.277794
# 2017-01-20 19:15:00 4.658013 2.101630 1.935904 1.750168
# 2017-01-20 19:30:00 4.841987 2.145122 1.861954 1.762004
Since an xts object is just a matrix with a time index, there's no need to coerce your matrix to a data.frame. Doing that would mean as.xts
would have to coerce it back to a matrix.