cytof数据处理难点之合并两个不同panel的数据集

前面我们已经完成了cytof数据处理的主要步骤,读入文件,质量控制,降维聚类分群,生物学注释和细胞亚群比例差异分析。 目录如下:

其实跟纯粹的单细胞转录组就非常类似了,不过单细胞转录组数据分析的细节以及背景我就不赘述了,看我在《单细胞天地》的单细胞基础10讲:

以及各式各样的个性化汇总教程,差不多就明白了。

基本流程走完了,仅仅是万里长征第一步而已。我们可以开始尝试分析一些文献的公共数据集啦,不过在处理那些数据的过程中,我们还需要传授给大家几个小技巧。

合并两个不同panel的cytof数据集

有一些情况下,你的同一个实验项目的多个FCS文件,它们的抗体顺序并不一致。如下:

 sce1 <- prepData(fs, panel, md, features = panel$fcs_colname)
 sce2 <- prepData(fs, panel, md, features = panel$fcs_colname)
 rowData(sce1)[,1]
 rowData(sce2)[,1]

可以看到,两个数据集的panel其实是一样的:

> rowData(sce1)[,1]
[1] "PerCP-Cy5-5-A" "APC-H7-A" "BV510-A" "PE-Cy7-A" 
[5] "BV421-A" "Alexa Fluor 647-A" "PE-A" "FITC-A" 
> rowData(sce2)[,1]
[1] "PerCP-Cy5-5-A" "APC-H7-A" "BV510-A" "PE-Cy7-A" 
[5] "PE-A" "Alexa Fluor 647-A" "FITC-A" "BV421-A"

都是8个抗体,但是呢,顺序不一样。

这个时候需要对 SingleCellExperiment 对象了如指掌:http://www.bioconductor.org/packages/release/bioc/vignettes/scater/inst/doc/overview.html

different quantifications (e.g., counts, CPMs, log-expression) can be stored simultaneously in the assays slot, 
and row and column metadata can be attached using rowData and colData, respectively.
metadata(1): experiment_info
assays(2): counts exprs

首先把SingleCellExperiment对象拆分

SingleCellExperiment对象比较复杂,需要自行阅读,http://www.bioconductor.org/packages/release/bioc/vignettes/scater/inst/doc/overview.html

拆分的代码如下:

 ct1=assay(sce1,1)
 ct1[1:4,1:4]
 ex1=assay(sce1,2)
 ex1[1:4,1:4]
 r1=as.data.frame(rowData(sce1))
 c1=as.data.frame(colData(sce1))

 ct2=assay(sce2)
 ct2[1:4,1:4]
 ex2=assay(sce2,2)
 ex2[1:4,1:4]
 r2=as.data.frame(rowData(sce2))
 c2=as.data.frame(colData(sce2))

然后把两个抗体对齐:

 r1;r2
 n=match(r1$channel_name,r2$channel_name)
 r1;r2[n,]

 # 首先合并抗体信号矩阵
 ct=cbind(ct1,ct2[n,])
 ex=cbind(ex1,ex2[n,])
 # 然后合并细胞的样本来源及其分组信息
 phe=rbind(c1,c2)
 head(phe)
 # 最后确定抗体的标记信息
 r1 # 因为r2已经被修改回来成为了r1
 # 参考 http://www.bioconductor.org/packages/release/bioc/vignettes/scater/inst/doc/overview.html

有了两个矩阵,assays(2): counts exprs ,以及抗体信息,样品信息,就可以重新组建SingleCellExperiment对象,它比较复杂,需要自行阅读,http://www.bioconductor.org/packages/release/bioc/vignettes/scater/inst/doc/overview.html

最后重新组建SingleCellExperiment对象

代码超级简单

 sce <- SingleCellExperiment(
 assays = list(counts = ct,exprs=ex), 
 colData = phe,
 rowData = r1
 )
 sce

得到的全新的SingleCellExperiment对象就包含了两个不同panel顺序的cytof数据集啦。

如果不仅仅是panel顺序不一样

panel本身也不一样,就比较麻烦了,不同的panel可能研究的生物学问题不一样,或许有批次效应等其它未知的混杂因素。

需要具体问题具体分析啦。

Comments are closed.