私はデータフレームを持っています:
head(df)
GMT
MSCI ACWI DJGlbl Russell 1000 Russell Dev S&P GSCI Industrial
1999-03-01 -0.0070000000 0.0020000000 -0.0010000000 -0.0150000000 -0.0100000000
1999-03-02 -0.0050352467 0.0009980040 -0.0070070070 -0.0020304569 0.0040404040
1999-03-03 -0.0020242915 0.0029910269 0.0000000000 -0.0061037640 0.0010060362
1999-03-04 0.0070993915 0.0029821074 0.0151209677 -0.0010235415 0.0050251256
1999-03-05 0.0241691843 0.0089197225 0.0218470705 0.0276639344 -0.0120000000
1999-03-08 0.0039331367 0.0039292731 0.0058309038 -0.0009970090 -0.0020242915
1999-03-09 0.0029382958 0.0000000000 -0.0028985507 0.0069860279 -0.0010141988
1999-03-10 0.0078125000 0.0088062622 0.0058139535 0.0118929633 0.0091370558
以下のコードでローリング ウィンドウ共分散行列を計算しました。名前 (windowsList) は、たとえば1-60
最初の 60 日間の cov.matrix では $ 2-61
、ウィンドウが 1 日シフトしたときの次の共分散行列では$ の値を達成します。
windowSize <- 60
windows <- embed(1:nrow(df), windowSize)
lapplyApproach <- function(df, windows) {
windowsList <- split(t(windows), rep(1:nrow(windows), each=ncol(windows)))
names(windowsList) <- unlist(lapply(windowsList, function(x)paste(range(x), sep="", collapse="-")))
return(lapply(windowsList, function(x)cov(df[x, ])))
}
私の問題は、数値ではなく日付の範囲で名前 (windowsList) の値を取得したいということです。たとえば、 $ の代わりに $ の1-60
ようなものが必要1999-03-01 - 1999-05-21
です。日付のマトリックスを作成してから、それらの間の範囲を計算しようとしましたが、成功しませんでした。アイデアは、名前 ($1999-03-01 - 1999-05-21
など) がシートの名前として Excel に渡されるということです。例:
library("XLConnect")
hb <- loadWorkbook("stuff.xlsx", create = TRUE)
createSheet(hb, names(windowsList))
writeWorksheet(hb,windowsList, names(windowsList),header=TRUE)
saveWorkbook(hb)
誰かが親切に私を正しい方向に向けることができますか?:)よろしくお願いします