Предполагая, что вход 3-х столбцов воспроизводится в примечании и используя окно ширины 3 для иллюстрации, определите функцию корреляции Cor
, которая принимает матрицу и вычисляет ее корреляционную матрицу, извлекающую нижнюю треугольную часть, чтобы исключить избыточность и добавить имена столбцов , Теперь используйте это с rollapplyr
:
library(xts)
Cor <- function(x) {
corr <- cor(x)
out <- as.data.frame.table(corr)[lower.tri(corr), ]
with(out, setNames(Freq, paste(Var1, Var2)))
}
rollapplyr(xx, 3, Cor, by.column = FALSE)
, давая:
DO0182U09B3.DO0182U09A3 DO0182U09C3.DO0182U09A3 DO0182U09C3.DO0182U09B3
2017-01-20 16:30:00 NA NA NA
2017-01-20 16:45:00 NA NA NA
2017-01-20 17:00:00 0.98573 -0.99613 -0.99671
2017-01-20 17:15:00 0.98629 0.95983 0.99297
2017-01-20 17:30:00 0.52664 0.47475 0.99820
2017-01-20 17:45:00 0.56204 0.50460 0.99769
Примечание: Вход xx
в воспроизводимой форме:
xx <- structure(c(-101.5, -101.32, -101.45, -100.91, -100.91, -100.97,
-103.37, -102.75, -103.3, -95.92, -103.04, -103.67, -103.86,
-104.22, -103.93, -99.22, -104.09, -104.12), .Dim = c(6L, 3L), .Dimnames = list(
NULL, c("DO0182U09A3", "DO0182U09B3", "DO0182U09C3")), index = structure(c(1484947800,
1484948700, 1484949600, 1484950500, 1484951400, 1484952300), tzone = "", tclass = c("POSIXct",
"POSIXt")), class = c("xts", "zoo"), .indexCLASS = c("POSIXct",
"POSIXt"), tclass = c("POSIXct", "POSIXt"), .indexTZ = "", tzone = "")