2017-09-15 52 views
1

我想使用dplyr將多個事物組合在一起:鑑於我有多個返回的時間序列,我想計算平均相關性(我簡化了我的實際任務以提供最簡單可能的例子)所有的回報與所有其他回報。當然(與下面的例子不同),我的真實數據集相當大(並且還沒有spread(stock,ret))包含多個NA。此外,在第二步中,我將不得不創建自己的功能並將其提供給rollapply。因此,如果您有使用RCpproll軟件包的建議,我將非常高興!dplyr滾動更改基於多列的多個列

在下面的例子中,您可以看到我需要一次輸入所有列,選擇一個窗口,同時對所有列應用函數,接收具有相同列數的向量,依此類推......

這是我的例子:

df <- data.frame(Date =as.Date("1926-01-01")+1:24, 
      PERMNO1 = rnorm(24,0.01,0.3), 
      PERMNO2 = rnorm(24,0.02,0.4), 
      PERMNO2 = rnorm(24,-0.01,0.6)) 
df %>% 
do(rollapplyr(.[,-1],width=12,function(a) colMeans(cor(a)))) 

我希望得到的是這樣的:

df2 <- df; df2[,2:4]<-NA 
for (i in 12:24){ 
    df2[i,2:4] <- colMeans(cor(df[(i-12):i,2:4])) 
} 
df2 
    Date PERMNO1 PERMNO2 PERMNO2.1 
1926-01-02   NA  NA  NA 
1926-01-03   NA  NA  NA 
1926-01-04   NA  NA  NA 
1926-01-05   NA  NA  NA 
1926-01-06   NA  NA  NA 
1926-01-07   NA  NA  NA 
1926-01-08   NA  NA  NA 
1926-01-09   NA  NA  NA 
1926-01-10   NA  NA  NA 
1926-01-11   NA  NA  NA 
1926-01-12   NA  NA  NA 
1926-01-13 0.14701350 0.2001694 0.3787320 
1926-01-14 0.15364347 0.2438042 0.3143516 
1926-01-15 0.16118233 0.2549841 0.3266877 
1926-01-16 0.04727533 0.2534126 0.3132990 
1926-01-17 0.05220443 0.2411095 0.2744379 
1926-01-18 0.12252848 0.2461743 0.2766122 
1926-01-19 0.08414717 0.2287705 0.2897744 
1926-01-20 0.11164866 0.2503174 0.2414130 
1926-01-21 0.08886537 0.2604810 0.2621597 
1926-01-22 0.14216304 0.2667540 0.2543573 
1926-01-23 0.12654902 0.3086711 0.2751671 
1926-01-24 0.11068607 0.3019835 0.2728166 
1926-01-25 0.06714698 0.2696828 0.2184242 
+0

問題中顯示的輸出不可重現,因爲隨機數沒有使用'set.seed(...)'。 –

回答

1

轉換數據幀動物園對象,運行rollapplyr及轉換回:如果你想只保留答案動物園對象,它可能會比代表時間序列的數據幀更加方便

library(dplyr) 
library(zoo) 

df %>% 
    read.zoo %>% 
    rollapplyr(12, function(x) colMeans(cor(x)), by.column = FALSE, fill = NA) %>% 
    fortify.zoo 

最後一行可以省略。