如何计算R中两个向量的所有子集的关联?
我在工作R.我有长度n
的两个向量,比方说a
和b
。我想计算长度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])
现在我使用的是循环的,但它的速度太慢。我怎样才能以更快的速度做到这一点?
首先创建一个分组变量(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]
问题依然存在,我的矢量长度为3172000,我的子集61的长度。脚本仍在运行。 – 2015-02-07 14:06:46
多久持续多久?第二个版本对我来说是最快的,它持续不到一秒钟。 – DatamineR 2015-02-07 14:22:49
第二版运作良好。 – 2015-02-08 10:30:31
的语法建议你使用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