如何计算R中两个向量的所有子集的关联?

问题描述:

我在工作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

首先创建一个分组变量(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