如何根据 `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