我在R.工作。我有两个长度为n
的向量,让我们说a
和b
。我希望以这种方式计算长度为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])
现在我正在使用一个循环,但它太慢了。我怎样才能更快地完成它?
答案 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]