我正在准备我们的实验数据,通过部分遵循本指南进行轨迹分析,我有一个包含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基因是我所期望的。