前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >scRNA挖掘 |只有矩阵如何构建单细胞对象?meta信息如何利用?

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

作者头像
生信补给站
发布2023-08-25 10:02:42
9260
发布2023-08-25 10:02:42
举报
文章被收录于专栏:生信补给站

前面在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 读取。

代码语言:javascript
复制
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文件

代码语言:javascript
复制
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 为读取的矩阵文件。

代码语言:javascript
复制
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)

代码语言:javascript
复制
                            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信息。

代码语言:javascript
复制
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即可。

代码语言:javascript
复制
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函数进行添加

代码语言:javascript
复制
sce3 <- AddMetaData(
       object = sce0,
       metadata = meta2
   )
head(sce3@meta.data)
3,矩阵添加

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

代码语言:javascript
复制
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库,或者找到一些手动注释的思路。

◆ ◆ ◆ ◆ ◆

精心整理(含图PLUS版)|R语言生信分析,可视化(R统计,ggplot2绘图,生信图形可视化汇总)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信补给站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1 读取下载的数据
  • 1.2 创建seurat对象
  • 1,CreateSeuratObject中的meta.data参数
  • 2,AddMetaData函数
  • 3,矩阵添加
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档