Как разделить ген на 2 гена на основе значений `anndata.obs[‘образец’]`?

#python #bioinformatics

Вопрос:

Может ли кто-нибудь помочь мне и рассказать, как разделить ген на 2 гена на основе anndata.obs['sample'] значений? (https://github.com/theislab/anndata) Потому что есть 2 трансгенных гена, и большинство последовательностей одинаковы, которые не могут быть разделены во время выравнивания. Эти 2 гена находятся в разных образцах, поэтому я хочу разделить их в файле anndata. Большое спасибо.

Лучшие

Ответ №1:

Я не знаю, есть ли способ сделать это в 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
 

Комментарии:

1. Это действительно полезно. Большое спасибо!