2015-02-07 8 views
0

저는 R에서 근무합니다. 길이가 n 인 벡터가 두 개 있는데, ab이라고합시다. 나는 이런 식으로, 길이 m의 모든 부분 집합의 상관 관계를 계산하려면 : 지금은 대한 사이클을 사용하고R에서 두 벡터의 모든 부분 집합의 상관 관계를 계산하는 방법?

cor(a[1:m],b[1:m]) 
cor(a[m+1:2m],b[m+1:2m]) 
... 
cor(a[km+1:n],b[km+1:n]) 

하지만 너무 느리다. 어떻게하면 더 빨리 할 수 ​​있습니까?

+0

:

library(dplyr) df %>% group_by(index) %>% summarise(cor(a,b)) 

또는 data.table

구문 어쨌든 matlab에 사용하는 것이 좋습니다 .... http : //de.mat hocus.com/matlabcentral/fileexchange/43967-circular-cross-correlation-using-fft/content/xcorr_fft.m – BitTickler

답변

2

먼저 그룹화 변수 (index)를 만든 다음 계산 상관 관계의 GroupWise에 :

# Some fake data: 
set.seed(123) 
df <- data.frame(cbind(a = rnorm(100), b = rnorm(100), index = rep(1:10, each = 10))) 

# Loading the pryr package: 
library(plyr) 

ddply(df, .(index), summarise, "corr" = cor(a, b)) 
    index  corr 
1  1 0.26831285 
2  2 0.14373593 
3  3 0.21555988 
4  4 -0.27461416 
5  5 -0.08825786 
6  6 -0.58680476 
7  7 -0.02613450 
8  8 -0.29408586 
9  9 0.12030810 
10 10 -0.04391428 

을 또는 함께 dplyr :

library(data.table) 
setDT(df)[,cor(a, b), by = index] 
+0

문제가 계속됩니다. 내 벡터의 길이는 3172000이고 서브 세트의 길이는 61입니다. 스크립트가 아직 실행 중입니다. . –

+0

얼마나 오래 지속됩니까? 두 번째 버전은 나를 위해 가장 빠르며 1 초도 채 걸리지 않습니다. – DatamineR

+0

두 번째 버전은 잘 작동합니다. –

관련 문제