#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. Это действительно полезно. Большое спасибо!