2017-09-15 17 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

동물원 객체에 데이터 프레임을 변환,을 실행다시 변환 : 당신은 그냥 아마 데이터 프레임으로 시계열을 나타내는 것보다 더 편리 할 것이다 동물원 개체로 답을 유지하려는 경우

library(dplyr) 
library(zoo) 

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

마지막 행을 생략 할 수있다.