如何根据 `anndata.obs['sample']` 值将一个基因分成 2 个基因?
How to split a gene into 2 genes based on the `anndata.obs['sample']` values?
谁能帮我告诉我如何根据 anndata.obs['sample']
值将一个基因分成两个基因?
(https://github.com/theislab/anndata)
因为有2个转基因基因,而且大部分序列是相同的,比对时不能分开。
这两个基因在不同的样本中,所以我想在 anndata 文件中拆分它们。非常感谢。
最佳
我不知道 AnnData 中是否有办法做到这一点,但我们可以操纵 numpy 数组和 pandas 数据框,然后创建一个新的 AnnData,其中包含我们添加的新基因的添加行手动。
这应该是一个可重现的例子:
from anndata import AnnData
import numpy as np
import pandas as pd
#-- Create minimal reproducible example
gene_exp = np.array([[0,32,0,1], [1,2,1,34], [65,2,4,1]])
adata = AnnData(gene_exp)
adata.obs['annot'] = ['g1.1', 'g1.1', 'g1.2']
adata.var['gene'] = ['g'+str(i) for i in range(4)]
#-- Select gene and duplicate in matrix
idx = np.where(adata.var['gene'] == 'g1') # gene to be split into 2
idx_full = np.append(np.array([i for i in range(adata.n_vars)]), idx)
new_gexp = adata.X[:,idx_full]
#-- 'Split' expression by 'annot'
idx_samp = adata.obs['annot'] == 'g1.1'
new_gexp[idx_samp,-1] = 0
new_gexp[~idx_samp,idx] = 0
#-- Create new adata
new_var = adata.var
new_var.iloc[idx, 0] = 'g1.1'
new_var = new_var.append({'gene': 'g1.2'}, ignore_index = True)
adata_new = AnnData(new_gexp)
adata_new.var = new_var
adata_new.obs = adata.obs
谁能帮我告诉我如何根据 anndata.obs['sample']
值将一个基因分成两个基因?
(https://github.com/theislab/anndata)
因为有2个转基因基因,而且大部分序列是相同的,比对时不能分开。
这两个基因在不同的样本中,所以我想在 anndata 文件中拆分它们。非常感谢。
最佳
我不知道 AnnData 中是否有办法做到这一点,但我们可以操纵 numpy 数组和 pandas 数据框,然后创建一个新的 AnnData,其中包含我们添加的新基因的添加行手动。
这应该是一个可重现的例子:
from anndata import AnnData
import numpy as np
import pandas as pd
#-- Create minimal reproducible example
gene_exp = np.array([[0,32,0,1], [1,2,1,34], [65,2,4,1]])
adata = AnnData(gene_exp)
adata.obs['annot'] = ['g1.1', 'g1.1', 'g1.2']
adata.var['gene'] = ['g'+str(i) for i in range(4)]
#-- Select gene and duplicate in matrix
idx = np.where(adata.var['gene'] == 'g1') # gene to be split into 2
idx_full = np.append(np.array([i for i in range(adata.n_vars)]), idx)
new_gexp = adata.X[:,idx_full]
#-- 'Split' expression by 'annot'
idx_samp = adata.obs['annot'] == 'g1.1'
new_gexp[idx_samp,-1] = 0
new_gexp[~idx_samp,idx] = 0
#-- Create new adata
new_var = adata.var
new_var.iloc[idx, 0] = 'g1.1'
new_var = new_var.append({'gene': 'g1.2'}, ignore_index = True)
adata_new = AnnData(new_gexp)
adata_new.var = new_var
adata_new.obs = adata.obs