GWAS阵列转矩阵:基因型数据格式转换技术求助
基因分型三维阵列转换为样本×SNPs矩阵的实现方案(R/Python)
(以下为简化假设,实际数据量更大)假设已对10个样本完成基因分型,检测了3个SNPs,每个SNP包含2个等位基因,得到如下三维基因型阵列:
SNP 1 基因型阵列
| [,1] | [,2] | [,3] | [,4] | [,5] | [,6] | [,7] | [,8] | [,9] | [,10] | |
|---|---|---|---|---|---|---|---|---|---|---|
| [1,] | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 |
| [2,] | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 |
SNP 2 基因型阵列
| [,1] | [,2] | [,3] | [,4] | [,5] | [,6] | [,7] | [,8] | [,9] | [,10] | |
|---|---|---|---|---|---|---|---|---|---|---|
| [1,] | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 |
| [2,] | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 |
SNP 3 基因型阵列
| [,1] | [,2] | [,3] | [,4] | [,5] | [,6] | [,7] | [,8] | [,9] | [,10] | |
|---|---|---|---|---|---|---|---|---|---|---|
| [1,] | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
| [2,] | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
转换规则
- 同一列中两个值均为0时,结果为0
- 同一列中为0和1的组合时,结果为1
- 同一列中两个值均为1时,结果为2
转换后二维中间矩阵
SNP 1 中间结果
| [,1] | [,2] | [,3] | [,4] | [,5] | [,6] | [,7] | [,8] | [,9] | [,10] | |
|---|---|---|---|---|---|---|---|---|---|---|
| [1,] | 0 | 0 | 0 | 1 | 1 | 2 | 0 | 2 | 0 | 0 |
SNP 2 中间结果
| [,1] | [,2] | [,3] | [,4] | [,5] | [,6] | [,7] | [,8] | [,9] | [,10] | |
|---|---|---|---|---|---|---|---|---|---|---|
| [1,] | 2 | 0 | 1 | 1 | 1 | 2 | 0 | 2 | 0 | 0 |
SNP 3 中间结果
| [,1] | [,2] | [,3] | [,4] | [,5] | [,6] | [,7] | [,8] | [,9] | [,10] | |
|---|---|---|---|---|---|---|---|---|---|---|
| [1,] | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 2 | 0 | 0 |
最终「样本×SNPs」格式矩阵
| [,1] | [,2] | [,3] | [,4] | [,5] | [,6] | [,7] | [,8] | [,9] | [,10] | |
|---|---|---|---|---|---|---|---|---|---|---|
| [1,] | 0 | 0 | 0 | 1 | 1 | 2 | 0 | 2 | 0 | 0 |
| [2,] | 2 | 0 | 1 | 1 | 1 | 2 | 0 | 2 | 0 | 0 |
| [3,] | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 2 | 0 | 0 |
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
相关产品推荐
相关产品推荐

