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

基于缺失唯一ID为矩阵匹配/添加含10值的行(R语言)

解决方案:统一面板波次邻接矩阵的行结构

核心思路

  • 提取所有波次中出现的唯一ID,作为所有矩阵的统一行索引
  • 将每个波次的邻接矩阵转换为数据框,与全ID框架合并,缺失行填充指定值(此处为10)
  • 按ID排序后转回矩阵,保留原列名

可复现代码实现

# 原始输入数据
wave1 <- matrix(c(0,0,1,1,0,1,1,0,1,1), nrow = 5, ncol = 2, dimnames = list(c("1","2","4","5","9"), c("group1","group2")))
wave2 <- matrix(c(0,1,1,0,1,0,1,1), nrow = 4, ncol = 2, dimnames = list(c("1","4","8","9"), c("group1","group2")))

# 1. 获取所有波次的唯一ID并排序
all_ids <- sort(unique(c(rownames(wave1), rownames(wave2))))

# 2. 定义标准化矩阵的函数
standardize_matrix <- function(mat, all_ids, fill_val = 10) {
  # 矩阵转数据框,保留行名为ID列
  df <- as.data.frame(mat)
  df$id <- rownames(df)
  
  # 合并到全ID框架,填充缺失值
  full_df <- merge(data.frame(id = all_ids), df, by = "id", all.x = TRUE)
  full_df[is.na(full_df)] <- fill_val
  
  # 按ID排序后转回矩阵
  full_df <- full_df[order(full_df$id), ]
  mat_out <- as.matrix(full_df[, -1])
  rownames(mat_out) <- full_df$id
  colnames(mat_out) <- colnames(mat)
  return(mat_out)
}

# 3. 处理两个波次的矩阵
wave1_c <- standardize_matrix(wave1, all_ids)
wave2_c <- standardize_matrix(wave2, all_ids)

# 查看结果
wave1_c
wave2_c

结果说明

运行代码后生成的wave1_c和wave2_c完全匹配预期效果:

  • 所有矩阵统一为6行,行索引按唯一ID排序
  • 原始矩阵中未出现的ID(如wave1中的"8"、wave2中的"2""5")对应的整行填充为10
  • 原有ID的行保留原始数值,列名保持不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:30:52