如何在 R 中从 RollCor 的输出中切片数组?

How do I slice an array from the output from RollCor in R?

我试图获得两个变量 DGS10SP500 之间的滚动相关输出,但我得到的是每一行的相关矩阵输出。有没有办法将其切片以仅获取实际值 [0][1]。我是 R 的新手,来自 Python...

包和变量

library(quantmod)
getSymbols('DGS10',src='FRED')
getSymbols('SP500',src='FRED')

代码

```{r}
merge(DGS10, SP500) %>%
  na.omit() %>%
  roll_cor(width=5)
```

输出

          DGS10     SP500
DGS10 1.0000000 0.8542177
SP500 0.8542177 1.0000000

, , 6

          DGS10     SP500
DGS10 1.0000000 0.9104856
SP500 0.9104856 1.0000000

, , 7

          DGS10     SP500
DGS10 1.0000000 0.9672053
SP500 0.9672053 1.0000000

期望的输出

5       0.8542177
6       0.9104856
7       0.9672053

老实说,我第一次看到这样的数组 - [1:2, 1:2, 1:2496]。我发现使用像 [1, 2, 1:2496] 这样的多维索引是不可能从中获取值的。它的长度为 9984 (2496 * 4),因此您可以通过以下方式提取所需的值:

merge(DGS10, SP500) %>%
  na.omit() %>%
  roll_cor(width=5) %>%
  `[`(seq(2, length(.), 4)) %>%
  as.data.frame()

因为您是 R 的新手,所以它对您来说可能看起来有点模糊,它等同于:

temp <-
  merge(DGS10, SP500) %>%
  na.omit() %>%
  roll_cor(width=5)

temp[seq(2, length(temp), 4)] %>%
  as.data.frame()

但我会建议您使用 tidyquant 库。然后你可以更清楚地得到你的结果:

library(tidyquant)

tq_get(c('DGS10', 'SP500'), get = 'economic.data') %>%
  spread(symbol, price) %>%
  na.omit() %>%
  tq_mutate_xy(
    x = DGS10,
    y = SP500,
    mutate_fun = runCor,
    n = 5
  )