百万级别的单细胞数据是怎样完成注释的(R)
1.背景知识
细胞数量太大时,单纯的一次降维聚类分群是无法搞定的,所以需要二次分群然后把注释的结果重新放回原来的对象中。
2.加载数据
sce.Rdata
是降维聚类分群+手动注释的结果,其中celltype列是细胞类型注释列。
seurat_Fibro.obs.csv是成纤维细胞二次分群+注释得到的meta表格。在本公众号聊天框(注意不是评论区)回复:anno1039可以获取本文的示例数据。
代码语言:javascript代码运行次数:0运行复制rm(list = ls())
library(Seurat)
library(dplyr)
library(ggplot2)
load("sce.Rdata")
DimPlot(sce, reduction = "umap",label=T)+NoLegend()+
scale_color_brewer(palette = 'Set1')
image.png
代码语言:javascript代码运行次数:0运行复制subcell_annotator = read.csv('seurat_Fibro.obs.csv',row.names = 1)['celltype']
head(subcell_annotator)
代码语言:javascript代码运行次数:0运行复制## celltype
## AAAGGATGTAGAAACT-1 M0
## AACAAAGGTAAGGTCG-1 M0
## AACGGGACAACACAGG-1 M1
## AACTTCTTCCTACAAG-1 M0
## AAGATAGGTCGTTGGC-1 M1
## AAGCCATTCTAGACCA-1 M1
代码语言:javascript代码运行次数:0运行复制unique(subcell_annotator$celltype)
代码语言:javascript代码运行次数:0运行复制## [1] "M0" "M1"
3.整合
将二次分群的结果整合到原来的seurat对象的meta.data中去
代码语言:javascript代码运行次数:0运行复制sce$celltype = as.character(Idents(sce))
sce$celltype = ifelse(sce$celltype=='Fibroblasts',
subcell_annotator$celltype[match(colnames(sce),rownames(subcell_annotator))],
sce$celltype)
这句是R语言基础部分的两个精华知识ifelse和match的合体。 真羡慕你一步到位从我这里学到了这么厉害的技能