scRNA挖掘 |只有矩阵如何构建单细胞对象?meta信息如何利用?

简介: scRNA挖掘 |只有矩阵如何构建单细胞对象?meta信息如何利用?

本文首发于“生信补给站”公众号  https://mp.weixin.qq.com/s/WJQkN_jtYg19yGz0uq8tyg


前面在scRNA分析|多样本merge 和 harmony去批次提到单细胞的数据形式有很多种。如果提供的是标准的10X的三个文件就可以直接read10X读取,那如果只有矩阵文件如何进行下游分析呢?

如果额外给了细胞水平的meta文件,如何利用呢?


本文以2021年12月发表在nature cancer上的文献数据为例,读取提供的GSE179994中的矩阵和meta数据。

一 载入数据,R包

文章https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE179994只提供了矩阵文件,不能使用Read10X函数的形式,但是也可以很简单的读取。

1.1 读取下载的数据

1) 读取矩阵文件

注意区分rds 和 RData文件的读取方式 。如果是文本文件的话直接read.table 或者 readMM 读取。

library(tidyverse)
library(Seurat)
data <- readRDS("GSE179994_all.Tcell.rawCounts.rds")
data[1:4,1:4]
4 x 4 sparse Matrix of class "dgCMatrix"
       P1.ut.AAACCTGAGGCACATG-1 P1.ut.AAACCTGGTGGTACAG-1 P1.ut.AAACCTGTCACGGTTA-1 P1.ut.AAACCTGTCCGCTGTT-1
OR4F5                         .                        .                        .                        .
OR4F29                        .                        .                        .                        .
OR4F16                        .                        .                        .                        .
SAMD11                 

2)读取meta文件

meta <- read.table("GSE179994_Tcell.metadata.tsv",header = T )
head(meta)
                    cellid patient sample celltype        cluster
1 P1.ut.AAACCTGAGGCACATG-1      P1 P1.pre     <NA>           <NA>
2 P1.ut.AAACCTGGTGGTACAG-1      P1 P1.pre      CD4    CD4_C8-Treg
3 P1.ut.AAACCTGTCACGGTTA-1      P1 P1.pre      CD4    CD4_C8-Treg
4 P1.ut.AAACCTGTCCGCTGTT-1      P1 P1.pre      CD4 CD4_C9-Prolif.
5 P1.ut.AAACCTGTCTGGTATG-1      P1 P1.pre     <NA>           <NA>
6 P1.ut.AAACCTGTCTTGAGAC-1      P1 P1.pre      CD4    CD4_C8-Treg

可以看到提供了cell level的注释信息。

1.2 创建seurat对象

依然使用CreateSeuratObject 函数,此处count 为读取的矩阵文件。

sce0 <- CreateSeuratObject(counts = data)
sce0
head(sce0@meta.data)
An object of class Seurat  19790 features across 150849 samples within 1 assay  Active assay: RNA (19790 features, 0 variable features)
                            orig.ident nCount_RNA nFeature_RNA
P1.ut.AAACCTGAGGCACATG-1 SeuratProject       3265         1241
P1.ut.AAACCTGGTGGTACAG-1 SeuratProject       3871         1783
P1.ut.AAACCTGTCACGGTTA-1 SeuratProject       3945         1816
P1.ut.AAACCTGTCCGCTGTT-1 SeuratProject      21848         4426
P1.ut.AAACCTGTCTGGTATG-1 SeuratProject       2959         1376
P1.ut.AAACCTGTCTTGAGAC-1 SeuratProject       1809         1024

之后就可以进行标准的seurat流程,然后进行个性化挖掘分析了。

二 添加meta信息

文献提供的metadata文件中含有每个细胞的patient ,sample ,celltype 以及 cluster ,是很有利用价值的 。

之前在scRNA分析|Marker gene 可视化 以及 细胞亚群注释--你是如何人工注释的?中提到了如何添加亚群注释(cluster level)结果到metadata的方式,这里介绍下如何添加每个细胞(cell level)的metadata。

1,CreateSeuratObject中的meta.data参数

CreateSeuratObject函数除了简单的过滤条件外 ,还有一个重要的meta.data参数,可以输入提供的meta信息。


sce1 <- CreateSeuratObject(counts = data, 
                             meta.data =meta,
                             min.cells = 3,  # 可以注释掉 
                             min.features = 200,  # 可以注释掉
                             project = "GSE179994")c
head(sce1@meta.data)
sce1 <- CreateSeuratObject(counts = data, 
                             meta.data =meta,
                             min.cells = 3,  # 可以注释掉 
                             min.features = 200,  # 可以注释掉
                             project = "GSE179994")c
head(sce1@meta.data)

可以看到虽然添加上了meta的信息列,但是全是NA,这是什么原因呢?

检索之后https://github.com/satijalab/seurat/issues/2715 发现 ,是因为CreateSeuratObject要求meta文件中rownames是count文件的colnames

其实 ??CreateSeuratObject函数的帮助文档中也很明确的提到了该点要求。

发现问题后,只需要将meta文件的cellid列转为rownames即可。

meta2 <- meta %>% column_to_rownames("cellid")
sce2 <- CreateSeuratObject(counts = data, 
                          meta.data =meta2,
                          min.cells = 3, 
                          min.features = 200, 
                          project = "GSE179994")
head(sce2@meta.data)

2,AddMetaData函数

也可以在sce0的基础上,使用AddMetaData函数进行添加

sce3 <- AddMetaData(
       object = sce0,
       metadata = meta2
   )
head(sce3@meta.data)

3,矩阵添加

建议优先使用上述两种单细胞特有的方式进行添加。


sce4 <- sce0
sce4@meta.data <- sce4@meta.data %>% 
  rownames_to_column("cellid") %>% 
  inner_join(meta) %>% 
  column_to_rownames("cellid")  #一定要转回来
head(sce4@meta.data)

注意一定要把cell barcode的列转为rowname !

OK,搞定!以上三种方式结果是一致的。

建议可以先自行注释,然后参照文献注释结果修正自己的marker库,或者找到一些手动注释的思路。


相关文章
|
Ubuntu Linux 网络安全
Gogs:可能是比Gitlab更好的选择
Gitlab是一个很棒的Git托管服务,几乎像GitHub一样强大。 但是,有没有能和Gitlab/Github媲美但操作更简单的项目呢?我认为 Gogs 是很好的选择。
4159 0
Gogs:可能是比Gitlab更好的选择
|
存储 JavaScript BI
GitHub:GitHub简介、使用方法、经验总结(图文教程)之详细攻略(持续更新!)
GitHub:GitHub简介、使用方法、经验总结(图文教程)之详细攻略(持续更新!)
|
7月前
|
存储 数据可视化
单细胞分析: Scanpy 核心绘图 (3)
单细胞分析: Scanpy 核心绘图 (3)
单细胞分析: Scanpy 核心绘图 (3)
|
11月前
|
数据可视化 数据处理
CUT&Tag 数据处理和分析教程(8)
CUT&Tag 数据处理和分析教程(8)
833 12
|
安全 程序员 编译器
【实战经验】17个C++编程常见错误及其解决方案
想必不少程序员都有类似的经历:辛苦敲完项目代码,内心满是对作品品质的自信,然而当静态扫描工具登场时,却揭示出诸多隐藏的警告问题。为了让自己的编程之路更加顺畅,也为了持续精进技艺,我想借此机会汇总分享那些常被我们无意间忽视却又导致警告的编程小细节,以此作为对未来的自我警示和提升。
1475 104
|
存储 Web App开发 运维
|
数据处理
R语言数据合并:掌握`merge`与`dplyr`中`join`的巧妙技巧
【8月更文挑战第29天】如果你已经在使用`dplyr`进行数据处理,那么推荐使用`dplyr::join`进行数据合并,因为它与`dplyr`的其他函数(如`filter()`、`select()`、`mutate()`等)无缝集成,能够提供更加流畅和一致的数据处理体验。如果你的代码中尚未使用`dplyr`,但想要尝试,那么`dplyr::join`将是一个很好的起点。
|
存储 缓存 数据可视化
Cesium渲染一帧中用到的图形技术
Cesium渲染一帧中用到的图形技术
678 0
Cesium渲染一帧中用到的图形技术
|
移动开发 关系型数据库 atlas
空间转录组|数据读入,标准数据形式外,还有哪些&quot;天残地缺&quot;可以读取
空间转录组|数据读入,标准数据形式外,还有哪些&quot;天残地缺&quot;可以读取
2583 0

热门文章

最新文章