use*_*829 1 optimization r correlation
这是一个优化问题,我希望你有创意SO用户可能有答案.
我有一个大矩阵(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
Run Code Online (Sandbox Code Playgroud)
找到这2000个时间序列之间的相关性,最有效的方法是什么?我目前正在生成一个矩阵,每次发生事件时都有不同的二进制位,我填充该矩阵,在该时隙中发生了每个"类型"的事件数.在填充该矩阵之后,我遍历每对"类型"并找到相关性.这是非常低效的(约5小时).
如果存在一种by='type'在corR函数中实现特征的方法,我的整个问题可以解决吗?
感谢您的任何见解.
你可以尝试这样的事情
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
Run Code Online (Sandbox Code Playgroud)
该方法假设每种类型的观察数量是平衡的.
现在,我们可以用500万行和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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |