如何在R中转换scRNA-seq txt矩阵为Seurat可用格式并生成barcode文件
GSE141445的txt矩阵适配Seurat操作方法
你加载报错的核心原因很简单:Seurat::Read10X() 是专门读取10x标准输出的三个拆分文件(稀疏表达矩阵、基因列表、细胞barcode列表)的,而GSE141445提供的txt是已经整合好的整表:行对应基因,列对应单个细胞,列名本身就是你要找的barcode,不需要额外找资源下载,之前报错是用错了读取逻辑。
方法1:直接读取构造Seurat对象(最省事,不用生成中间文件)
不用硬凑10x的三个文件格式,直接读入整表拆分行名列名就能创建Seurat对象,新手优先选这个方法:
# 先安装未部署的依赖包 # install.packages("Seurat") # install.packages("data.table") library(Seurat) library(data.table) # 读大文件比内置read.table快10倍以上,不容易卡顿 # 把路径替换为你本地存储的txt文件路径 mat <- fread("GSE141445_scRNA_expression.txt", data.table = FALSE) # 把第一列的基因名设为矩阵行名,删除原基因名列 rownames(mat) <- mat[,1] mat <- mat[, -1] # 转为稀疏矩阵,可减少70%以上的内存占用 mat <- as.sparse(mat) # 此时矩阵列名就是所有细胞的barcode,直接创建对象即可 seu_obj <- CreateSeuratObject( counts = mat, project = "GSE141445", min.cells = 3, # 过滤在少于3个细胞中表达的基因 min.features = 200 # 过滤检测到基因数少于200的低质量细胞 )
跑完这步直接就能衔接下游质控、标准化、降维聚类的标准流程,不会再报缺失barcode的错误。
方法2:生成标准10x格式文件(含独立barcode文件)
如果你后续需要用Read10X()函数读取,就按下面代码拆成三个标准10x文件,存储在同一个文件夹下即可:
library(data.table) library(Matrix) # 读入矩阵的步骤和方法1一致 mat <- fread("你的本地txt文件路径", data.table = FALSE) rownames(mat) <- mat[,1] mat <- mat[, -1] mat <- as.sparse(mat) # 提前创建存储10x格式文件的文件夹 dir.create("./GSE141445_10x_format/") # 1. 生成barcode文件:直接提取矩阵列名写入即可 write.table( colnames(mat), file = "./GSE141445_10x_format/barcodes.tsv", sep = "\t", row.names = FALSE, col.names = FALSE, quote = FALSE ) # 2. 生成基因信息文件:包含两列,第一列为基因ID,第二列为基因名,该数据集行名为基因名时两列填相同内容即可 genes_df <- data.frame(gene_id = rownames(mat), gene_name = rownames(mat)) write.table( genes_df, file = "./GSE141445_10x_format/genes.tsv", sep = "\t", row.names = FALSE, col.names = FALSE, quote = FALSE ) # 3. 生成稀疏矩阵文件 writeMM(mat, file = "./GSE141445_10x_format/matrix.mtx")
三个文件生成完成后,直接运行Read10X("./GSE141445_10x_format/")就能正常读取,不会再提示缺少barcode文件。
避坑提示
- 不要用内置
read.table()读取几个G大小的表达矩阵,速度极慢还容易触发内存溢出,data.table::fread()是更优选择 - 读入完成后先运行
head(mat[,1:5])查看前5行前5列确认结构,只要第一列为基因名、其余列为细胞表达值就符合预期 - 转稀疏矩阵的步骤不要省略,大矩阵可减少数G的内存占用
内容的提问来源于stack exchange,提问作者mouseheartattack
相关产品推荐
相关产品推荐

