2017-05-24 18 views
1

私は時間の経過とともに相関行列の束の固有値を表す行列を持っています。行列をxtsに戻す

私の行列には時間が参照されている列がありますが、それは私が知る限り時系列やxtsオブジェクトではありません。

最終的には、この行列をデータフレームまたはxtsオブジェクトの形式に変換して、時間の経過とともにN個の最大固有値をプロットできるようにします。

この行列をこのような形式に変換するにはどうすればよいでしょうか?XTSは時系列表現であるため、この形式に変換することはできますか?

私は次のことを試してみましたが、私はそれを動作させることはできません。

time.index <- as.POSIXct(colnames(eigen)) 
eigenXTS <- as.xts(eigen, order.by = time.index) 

が、以下のように、私は戻って

Error in xts(x, order.by = order.by, frequency = frequency, ...) : 
    NROW(x) must match length(order.by) 

私のデータを参照し、エラーが見えてしまった:

> 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 

この問題を解決する最善の方法は誰でも私にどのように指摘できますか?

答えて

1

as.xtsマトリックスのrownamesをタイムスタンプすることを期待。あなたの場合、colnameseigenにタイムスタンプが含まれています。したがって、as.xtsを呼び出す前にeigenを転記する必要があります。

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 

xtsオブジェクトは時間インデックスを持つ行列なので、行列をdata.frameに強制する必要はありません。そうすることは、as.xtsがそれをマトリックスに強制しなければならないことを意味するでしょう。

1

行列を転置してdata.frameに変換してからxtsに変換する必要があると思います。レコードをレコード(観測値)として、変数として列を持つことができます。

> dput(eigen) 
structure(list(`2017-01-20 18:45:00` = c("4.461059", "2.291520", 
"2.215749", "1.424662"), `2017-01-20 19:00:00` = c("4.774866", 
"2.330239", "2.183941", "1.277794"), `2017-01-20 19:15:00` = c("4.658013", 
"2.101630", "1.935904", "1.750168"), `2017-01-20 19:30:00` = c("4.841987", 
"2.145122", "1.861954", "1.762004")), .Names = c("2017-01-20 18:45:00", 
"2017-01-20 19:00:00", "2017-01-20 19:15:00", "2017-01-20 19:30:00" 
), row.names = c(NA, 4L), class = "data.frame") 

> eigen <- as.data.frame(t(eigen)) 
          V1  V2  V3  V4 
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 

> xts_eigen <- xts::xts(eigen,order.by = as.POSIXct(rownames(eigen))) 
          V1  V2  V3  V4 
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 

> class(xts_eigen) 
[1] "xts" "zoo" 
関連する問題