我在工作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])
現在我使用的是循環的,但它的速度太慢。我怎樣才能以更快的速度做到這一點?
我在工作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