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

时间:2015-02-07 09:10:52

标签: r time-series subset apply correlation

我在R.工作。我有两个长度为n的向量,让我们说ab。我希望以这种方式计算长度为m的所有子集的相关性:

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])

现在我正在使用一个循环,但它太慢了。我怎样才能更快地完成它?

1 个答案:

答案 0 :(得分:2)

首先创建一个分组变量(index),然后按组计算相关性:

# 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]