2013-07-17 81 views
1

这是一个优化问题,我希望你的创意SO用户可能有一个答案。在R中有效计算相关性?

我有一个大矩阵(500万x 2)有两个值:时间和类型。实质上,每个“类型”是它自己的时间序列 - 下面的数据表示三个不同的时间序列(一个用于A,一个用于B,另一个用于C)。有2000个不同的“类型”。

mat 
    time type 
[1,] 50 A 
[2,] 50 A 
[3,] 12 B 
[4,] 24 B 
[5,] 80 B 
[6,] 92 B 
[7,] 43 C 
[8,] 69 C 

什么是最有效的方式来找到这2000个时间序列之间的相关性?我目前正在生成一个矩阵,其中每次发生事件时都会有不同的分箱,并且我将该时隙中每个“类型”发生的事件数量填充到矩阵中。在填充矩阵之后,我遍历每一对“类型”并找出相关性。这是非常低效的(~5小时)。

如果在R的cor函数中存在一种实现by='type'功能的方法,那么可以解决我的整个问题?

感谢您的任何见解。

回答

5

你可以尝试这样的事情

set.seed(1) 
df <- 
data.frame(time = rnorm(15), type = rep(c("a", "b", "c"), each = 5)) 

cor(do.call(cbind, split(df$time, df$type))) 
     a  b  c 
a 1.00000 0.27890 -0.61497 
b 0.27890 1.00000 -0.78641 
c -0.61497 -0.78641 1.00000 

这种方法假定每种类型的观测次数是平衡的。现在

,我们可以做一个真正的考验,5个百万行和2000型动物类型

set.seed(1) 
df <- data.frame(time = rnorm(5e6), type = sample(rep(1:2000, each = 2500))) 
system.time(cor(do.call(cbind, split(df$time, df$type)))) 
## user system elapsed 
## 6.387 0.000 6.391 
+0

这是一个很好的解决方案,但不幸的是我的数据集不包含观测均衡数量。你知道是否有办法调整它? – user2588829