首页 > 解决方案 > 如何从 R 中 RollCor 的输出中切片数组?

问题描述

我正在尝试获得两个变量DGS10和之间的滚动相关输出SP500,但是我得到了每一行的相关矩阵输出。有没有办法对其进行切片以仅获得实际值 [0][1]。我是来自 Python 的 R 新手...

包和变量

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

标签: rcorrelationdata-manipulationrolling-computation

解决方案


老实说,我第一次看到这样的数组 - [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
  )

推荐阅读