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

GWAS阵列转矩阵:基因型数据格式转换技术求助

基因分型三维阵列转换为样本×SNPs矩阵的实现方案(R/Python)

(以下为简化假设,实际数据量更大)假设已对10个样本完成基因分型,检测了3个SNPs,每个SNP包含2个等位基因,得到如下三维基因型阵列:

SNP 1 基因型阵列

[,1][,2][,3][,4][,5][,6][,7][,8][,9][,10]
[1,]0000110100
[2,]0001010100

SNP 2 基因型阵列

[,1][,2][,3][,4][,5][,6][,7][,8][,9][,10]
[1,]1000110100
[2,]1011010100

SNP 3 基因型阵列

[,1][,2][,3][,4][,5][,6][,7][,8][,9][,10]
[1,]0000010100
[2,]0000010100

转换规则

  • 同一列中两个值均为0时,结果为0
  • 同一列中为0和1的组合时,结果为1
  • 同一列中两个值均为1时,结果为2

转换后二维中间矩阵

SNP 1 中间结果

[,1][,2][,3][,4][,5][,6][,7][,8][,9][,10]
[1,]0001120200

SNP 2 中间结果

[,1][,2][,3][,4][,5][,6][,7][,8][,9][,10]
[1,]2011120200

SNP 3 中间结果

[,1][,2][,3][,4][,5][,6][,7][,8][,9][,10]
[1,]0000020200

最终「样本×SNPs」格式矩阵

[,1][,2][,3][,4][,5][,6][,7][,8][,9][,10]
[1,]0001120200
[2,]2011120200
[3,]0000020200

R语言实现方案

假设三维阵列维度为2×10×3(等位基因×样本×SNP),直接利用求和匹配转换规则,代码如下:

# 构造示例三维阵列
geno_array <- array(
  c(
    # SNP1
    0,0,0,0,1,1,0,1,0,0,
    0,0,0,1,0,1,0,1,0,0,
    # SNP2
    1,0,0,0,1,1,0,1,0,0,
    1,0,1,1,0,1,0,1,0,0,
    # SNP3
    0,0,0,0,0,1,0,1,0,0,
    0,0,0,0,0,1,0,1,0,0
  ),
  dim = c(2, 10, 3)
)

# 按样本和SNP维度对列求和,直接得到中间结果
intermediate <- apply(geno_array, c(2,3), sum)

# 转置得到样本×SNPs格式的最终矩阵
final_matrix <- t(intermediate)

# 查看结果
print(final_matrix)

Python实现方案

使用NumPy库处理,代码如下:

import numpy as np

# 构造示例三维数组,调整维度为(样本数, 等位基因数, SNP数)
geno_array = np.array([
    # SNP1
    [[0,0,0,0,1,1,0,1,0,0],
     [0,0,0,1,0,1,0,1,0,0]],
    # SNP2
    [[1,0,0,0,1,1,0,1,0,0],
     [1,0,1,1,0,1,0,1,0,0]],
    # SNP3
    [[0,0,0,0,0,1,0,1,0,0],
     [0,0,0,0,0,1,0,1,0,0]]
]).transpose(1,0,2)

# 按等位基因维度求和得到中间结果
intermediate = np.sum(geno_array, axis=1)

# 转置得到SNP为行、样本为列的最终矩阵
final_matrix = intermediate.T

# 查看结果
print(final_matrix)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:14:59