试图连接12个AnnData对象的列表,但我得到重复



我正在准备我们的实验数据,通过部分遵循本指南进行轨迹分析,我有一个包含12个AnnData对象的列表,我将其作为织机文件读取。其中6个来自一次测序而另外6个来自另一次测序。我遵循上述链接的建议,使用velocyto生成拼接/未拼接计数矩阵,这就是我获得织机文件的方式。

好了,这就是所有的背景信息。我想把所有这些AnnData对象合并成一个。

>>> loom_data
[AnnData object with n_obs × n_vars = 5000 × 36601
obs: 'comp.ident'
var: 'Accession', 'Chromosome', 'End', 'Start', 'Strand'
layers: 'ambiguous', 'matrix', 'spliced', 'unspliced', AnnData object with n_obs × n_vars = 5773 × 36601
obs: 'comp.ident'
var: 'Accession', 'Chromosome', 'End', 'Start', 'Strand'
layers: 'ambiguous', 'matrix', 'spliced', 'unspliced', AnnData object with n_obs × n_vars = 6807 × 36601
obs: 'comp.ident'
var: 'Accession', 'Chromosome', 'End', 'Start', 'Strand'
layers: 'ambiguous', 'matrix', 'spliced', 'unspliced', AnnData object with n_obs × n_vars = 5613 × 36601
obs: 'comp.ident'
var: 'Accession', 'Chromosome', 'End', 'Start', 'Strand'
layers: 'ambiguous', 'matrix', 'spliced', 'unspliced', AnnData object with n_obs × n_vars = 6052 × 36601
obs: 'comp.ident'
var: 'Accession', 'Chromosome', 'End', 'Start', 'Strand'
layers: 'ambiguous', 'matrix', 'spliced', 'unspliced', AnnData object with n_obs × n_vars = 3500 × 36601
obs: 'comp.ident'
var: 'Accession', 'Chromosome', 'End', 'Start', 'Strand'
layers: 'ambiguous', 'matrix', 'spliced', 'unspliced', AnnData object with n_obs × n_vars = 10510 × 36601
obs: 'comp.ident'
var: 'Accession', 'Chromosome', 'End', 'Start', 'Strand'
layers: 'ambiguous', 'matrix', 'spliced', 'unspliced', AnnData object with n_obs × n_vars = 9356 × 36601
obs: 'comp.ident'
var: 'Accession', 'Chromosome', 'End', 'Start', 'Strand'
layers: 'ambiguous', 'matrix', 'spliced', 'unspliced', AnnData object with n_obs × n_vars = 3246 × 36601
obs: 'comp.ident'
var: 'Accession', 'Chromosome', 'End', 'Start', 'Strand'
layers: 'ambiguous', 'matrix', 'spliced', 'unspliced', AnnData object with n_obs × n_vars = 1132 × 36601
obs: 'comp.ident'
var: 'Accession', 'Chromosome', 'End', 'Start', 'Strand'
layers: 'ambiguous', 'matrix', 'spliced', 'unspliced', AnnData object with n_obs × n_vars = 13595 × 36601
obs: 'comp.ident'
var: 'Accession', 'Chromosome', 'End', 'Start', 'Strand'
layers: 'ambiguous', 'matrix', 'spliced', 'unspliced', AnnData object with n_obs × n_vars = 9541 × 36601
obs: 'comp.ident'
var: 'Accession', 'Chromosome', 'End', 'Start', 'Strand'
layers: 'ambiguous', 'matrix', 'spliced', 'unspliced']

我很难理解如何做到这一点。所有的条形码都是loom_data[i].obs.index,它们是唯一的,并且包含它们对应的样品的后缀。最后,我想使用scVelo将这些层引入另一个AnnData对象。

问题是呼叫sc.concat。有重叠的是基因;所有条形码都不应该在12个列表元素中匹配。所以我想选择vars轴,我认为是1,我想要另一个轴上所有元素的并集:

test = sc.concat(loom_data, axis = 1, join = 'outer')

但是当我调用上面这行代码时,我得到的是所有基因的连接,它们的名字是唯一的,尽管我想合并它们的数量:

>>> test
AnnData object with n_obs × n_vars = 80125 × 439212
var: 'Accession', 'Chromosome', 'End', 'Start', 'Strand'
layers: 'ambiguous', 'matrix', 'spliced', 'unspliced'

我希望所有样本中不存在的基因计数为0。这怎么可能呢?

我只是让var名称唯一,然后沿着obs而不是var连接。

# for each element in loom_data, make var names unique
for ldata in loom_data:
ldata.var_names_make_unique()
test = sc.concat(loom_data, axis = 0, join = 'outer')
>>> test
AnnData object with n_obs × n_vars = 80125 × 36601
obs: 'comp.ident'
layers: 'ambiguous', 'matrix', 'spliced', 'unspliced'

~36k基因是我所期望的。