You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言相关系数矩阵列表重构为含时间、起止节点长数据框的实现方法

R 实现相关系数矩阵列表到指定结构 DataFrame 的转换

实现逻辑

  • 首先按照矩阵行名的顺序生成标的到编号的映射:jpm=1、gs=2、ms=3
  • 遍历每个相关系数矩阵,直接全量展开矩阵元素(保留对称重复项,无需取三角区)
  • 每个矩阵对应生成from编号、to编号、相关系数值、对应时间标识四列数据
  • 合并所有矩阵的处理结果得到最终数据集

完整代码

# 1. 构造你提供的输入数据(可直接运行)
g.list <- list(structure(c(1, 0.352209944821856, 0.802051885793422, 0.352209944821857, 
1, 0.827370298950111, 0.802051885793422, 0.827370298950111, 1
), .Dim = c(3L, 3L), .Dimnames = list(c("jpm", "gs", "ms"), c("jpm", 
"gs", "ms"))), structure(c(1, 0.670163753398499, 0.753168359152204, 
0.6701637533985, 1, 0, 0.753168359152202, 0, 1), .Dim = c(3L, 
3L), .Dimnames = list(c("jpm", "gs", "ms"), c("jpm", "gs", "ms"
))), structure(c(1, 0.681190013681026, 0.153608963486821, 0.681190013681026, 
1, 0.82058156983829, 0.153608963486822, 0.82058156983829, 1), .Dim = c(3L, 
3L), .Dimnames = list(c("jpm", "gs", "ms"), c("jpm", "gs", "ms"
))))

# 2. 生成标的编号映射,严格匹配矩阵行名顺序
ticker_names <- rownames(g.list[[1]])
ticker_id <- setNames(seq_along(ticker_names), ticker_names)

# 3. 自定义时间标识,可替换为你实际的时间向量,长度和g.list一致即可
time_labels <- seq_along(g.list) # 示例用1、2、3作为三个窗口的时间标识

# 4. 遍历处理所有矩阵,合并结果
result <- do.call(rbind, lapply(seq_along(g.list), function(i) {
  mat <- g.list[[i]]
  n <- nrow(mat)
  # 生成全量from、to编号,保留对称项
  from <- rep(seq_len(n), each = n)
  to <- rep(seq_len(n), times = n)
  # 拉平矩阵取相关系数
  corr_value <- as.vector(mat)
  # 生成当前窗口的数据集
  data.frame(
    from = from,
    to = to,
    corr = corr_value,
    time = time_labels[i]
  )
}))

结果验证

查看前6行数据,可以看到对称的1→2和2→1记录都被保留:

head(result)

输出示例:

from to      corr time
1    1  1 1.0000000    1
2    1  2 0.3522099    1
3    1  3 0.8020519    1
4    2  1 0.3522099    1
5    2  2 1.0000000    1
6    2  3 0.8273703    1

内容的提问来源于stack exchange,提问作者statwoman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:27:06