如何在 R 中从 RollCor 的输出中切片数组?
How do I slice an array from the output from RollCor in R?
我试图获得两个变量 DGS10
和 SP500
之间的滚动相关输出,但我得到的是每一行的相关矩阵输出。有没有办法将其切片以仅获取实际值 [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
)
我试图获得两个变量 DGS10
和 SP500
之间的滚动相关输出,但我得到的是每一行的相关矩阵输出。有没有办法将其切片以仅获取实际值 [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
)