2015-02-07 67 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

的語法建議你使用matlab無論如何.... http://de.mat hworks.com/matlabcentral/fileexchange/43967-circular-cross-correlation-using-fft/content/xcorr_fft.m – BitTickler 2015-02-07 09:23:29

回答

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(dplyr) 
df %>% group_by(index) %>% summarise(cor(a,b)) 

或者與data.table

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

問題依然存在,我的矢量長度爲3172000,我的子集61的長度。腳本仍在運行。 – 2015-02-07 14:06:46

+0

多久持續多久?第二個版本對我來說是最快的,它持續不到一秒鐘。 – DatamineR 2015-02-07 14:22:49

+0

第二版運作良好。 – 2015-02-08 10:30:31