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

如何在Relatedness Matrix中自动添加重复受试者

自动扩展亲缘关系矩阵:复制指定样本的关联模式

问题背景

我有如下的亲缘关系矩阵(Relatedness Matrix):

data <- (c(1,1,0.01,0.02,0.03,0.06,
           1,1,0.01,0.02,0.03,0.06,
           0.01,0.01,1,0.5,0.03,0.02,
           0.02,0.02,0.5,1,0.02,0.03,
           0.03,0.03,0.03,0.02,1,0.03,
           0.06,0.06,0.02,0.03,0.03,1))

Matrix <- matrix(data, ncol = 6,nrow=6, byrow = FALSE) # 默认byrow=FALSE

row.names(Matrix) <- c("1A", "1B", "2A", "2B", "3A", "3B")
colnames(Matrix) <- c("1A", "1B", "2A", "2B", "3A", "3B")

Matrix

输出矩阵:

1A   1B   2A   2B   3A   3B
1A 1.00 1.00 0.01 0.02 0.03 0.06
1B 1.00 1.00 0.01 0.02 0.03 0.06
2A 0.01 0.01 1.00 0.50 0.03 0.02
2B 0.02 0.02 0.50 1.00 0.02 0.03
3A 0.03 0.03 0.03 0.02 1.00 0.03
3B 0.06 0.06 0.02 0.03 0.03 1.00

我需要自动复制具有特定关联模式的样本(比如示例中的3B),命名为3C,最终得到如下矩阵:

data2 <- (c(1,1,0.01,0.02,0.03,0.06,0.06,
           1,1,0.01,0.02,0.03,0.06,0.06,
           0.01,0.01,1,0.5,0.03,0.02,0.02,
           0.02,0.02,0.5,1,0.02,0.03,0.03,
           0.03,0.03,0.03,0.02,1,0.03,0.03,
           0.06,0.06,0.02,0.03,0.03,1,1,
           0.06,0.06,0.02,0.03,0.03,1,1))

Matrix2 <- matrix(data2, ncol = 7,nrow=7, byrow = FALSE) # 默认byrow=FALSE

row.names(Matrix2) <- c("1A", "1B", "2A", "2B", "3A", "3B", "3C")
colnames(Matrix2) <- c("1A", "1B", "2A", "2B", "3A", "3B", "3C")

Matrix2

输出结果:

1A   1B   2A   2B   3A   3B   3C
1A 1.00 1.00 0.01 0.02 0.03 0.06 0.06
1B 1.00 1.00 0.01 0.02 0.03 0.06 0.06
2A 0.01 0.01 1.00 0.50 0.03 0.02 0.02
2B 0.02 0.02 0.50 1.00 0.02 0.03 0.03
3A 0.03 0.03 0.03 0.02 1.00 0.03 0.03
3B 0.06 0.06 0.02 0.03 0.03 1.00 1.00
3C 0.06 0.06 0.02 0.03 0.03 1.00 1.00

请问能否实现这一自动操作?

解决方案

完全可以通过R代码自动实现,无需手动构造新向量,核心思路是提取目标样本的行/列数据,再扩展矩阵并添加新行、列及对角线值:

# 定义原矩阵(复用你的代码)
data <- (c(1,1,0.01,0.02,0.03,0.06,
           1,1,0.01,0.02,0.03,0.06,
           0.01,0.01,1,0.5,0.03,0.02,
           0.02,0.02,0.5,1,0.02,0.03,
           0.03,0.03,0.03,0.02,1,0.03,
           0.06,0.06,0.02,0.03,0.03,1))

Matrix <- matrix(data, ncol = 6,nrow=6, byrow = FALSE)
row.names(Matrix) <- c("1A", "1B", "2A", "2B", "3A", "3B")
colnames(Matrix) <- c("1A", "1B", "2A", "2B", "3A", "3B")

# 1. 指定要复制的样本名称和新样本名称
target_sample <- "3B"
new_sample <- "3C"

# 2. 提取目标样本的行数据(新样本与原有样本的关联值)
new_row <- Matrix[target_sample, ]
# 3. 提取目标样本的列数据(原有样本与新样本的关联值,与行数据一致)
new_col <- Matrix[, target_sample]

# 4. 扩展原矩阵:先加新列,再加新行
Matrix_extended <- cbind(Matrix, new_col)
Matrix_extended <- rbind(Matrix_extended, c(new_row, 1)) # 对角线值设为1(样本自身关联度)

# 5. 更新行列名称
colnames(Matrix_extended)[ncol(Matrix_extended)] <- new_sample
row.names(Matrix_extended)[nrow(Matrix_extended)] <- new_sample

# 查看结果
Matrix_extended

代码说明

  • 利用亲缘关系矩阵的对称性,直接复用目标样本的行/列数据作为新样本的关联值
  • 扩展矩阵时,通过cbind添加新列、rbind添加新行,新行末尾设为1(样本与自身的关联度为1)
  • 自动更新行列名称,无需手动修改

运行后得到的结果与期望的Matrix2完全一致。

内容的提问来源于Stack Exchange,提问作者JuanJMV

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:44:59