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

在R中合并多时间点二分网络矩阵的行与列名

合并多个二分网络矩阵并统一维度

核心思路

先提取所有矩阵的行、列名并取排序后的并集,创建对应维度的空矩阵(填充指定默认值),再逐个将原矩阵的数值映射到新矩阵的对应位置。

示例代码实现

# 示例数据
adj1 <- matrix(0, 3, 5)
colnames(adj1) <- c("g1", "g2", "g3", "g5", "g6")
rownames(adj1) <- c("Tim", "John", "Sarah")

adj2 <- matrix(0, 4, 2)
colnames(adj2) <- c("g1", "g4")
rownames(adj2) <- c("Tim", "Mary", "John", "Paolo")

# 1. 获取所有行、列名的排序并集
all_rows <- sort(unique(c(rownames(adj1), rownames(adj2))))
all_cols <- sort(unique(c(colnames(adj1), colnames(adj2))))

# 2. 创建目标矩阵,填充默认值(这里用NA,换成10只需把NA改为10)
combined_adj <- matrix(NA, nrow = length(all_rows), ncol = length(all_cols))
rownames(combined_adj) <- all_rows
colnames(combined_adj) <- all_cols

# 3. 填充第一个矩阵的数据
combined_adj[rownames(adj1), colnames(adj1)] <- adj1

# 4. 填充第二个矩阵的数据
combined_adj[rownames(adj2), colnames(adj2)] <- adj2

# 查看最终结果
combined_adj

扩展到多个矩阵的批量处理

如果有更多矩阵(比如统一存放在列表mat_list中),可以用循环批量完成:

# 假设所有待合并矩阵都放在这个列表里
mat_list <- list(adj1, adj2)

# 获取所有行、列名的排序并集
all_rows <- sort(unique(unlist(lapply(mat_list, rownames))))
all_cols <- sort(unique(unlist(lapply(mat_list, colnames))))

# 创建目标矩阵
combined_adj <- matrix(NA, nrow = length(all_rows), ncol = length(all_cols))
rownames(combined_adj) <- all_rows
colnames(combined_adj) <- all_cols

# 批量填充所有矩阵的数据
for(mat in mat_list) {
  combined_adj[rownames(mat), colnames(mat)] <- mat
}

关键说明

  • 默认值可按需替换:把matrix(NA, ...)中的NA改成10即可满足填充10的需求。
  • 行列名自动按字母顺序排序,完全匹配你的要求。
  • 原矩阵的数值会精准映射到新矩阵的对应位置,未被原矩阵覆盖的区域保留设定的默认值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 23:30:07