我们生信技能树的学员交流群中最近发现了一个大家问的比较多的问题,就是GEO数据库提供的不是标准的三个单细胞文件时,初学者读取起来就有点费劲,下面来看看学员问的这个数据,使用代码如何自动整理~
此外,我们生信技能树每个月都有一期带领初学者,0基础的生信入门培训,会有各种贴心的答疑,最新一期在8月4号,感兴趣的可以去看看呀:生信入门&数据挖掘线上直播课8月班。
学员提到的数据根据单个样本编号很快就可以得到数据集的编号为:GSE231755
https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE231755
数据为3个文件,附件 GSE231755_RAW.tar的内容如下:
GSM7300098 Control
GSM7300099 1_week
GSM7300100 2_month
下载下来:
###
### Create: Jianming Zeng
### Date: 2023-12-31
### Email: jmzeng1314@163.com
### Blog: http://www.bio-info-trainee.com/
### Forum: http://www.biotrainee.com/thread-1376-1-1.html
### CAFS/SUSTC/Eli Lilly/University of Macau
### Update Log: 2023-12-31 First version
### Update Log: 2024-12-09 by juan zhang (492482942@qq.com)
###
rm(list=ls())
options(stringsAsFactors = F)
library(ggsci)
library(dplyr)
library(future)
library(Seurat)
library(clustree)
library(cowplot)
library(data.table)
library(ggplot2)
library(patchwork)
library(stringr)
library(qs)
library(Matrix)
## 下载
# https://mp.weixin.qq.com/s/uEso7yRZB300MnMhSpXH_Q
library(GEOquery)
# filter_regex: 指定下载的
# fetch_files = F, 返回下载链接
getGEOSuppFiles(gse,fetch_files = T)
## 移动文件夹
# 解压缩获取数据
# 一般下载下来的都是tar结尾的压缩文件
untar("GSE231755_RAW.tar",exdir = "GSE231755_RAW")
list.files("GSE231755_RAW/")
现在GSE231755_RAW/的内容如下:
# [1] "GSM7300098_ctrl_barcodes.tsv.gz" "GSM7300098_ctrl_features.tsv.gz" "GSM7300098_ctrl_matrix.mtx.gz" "GSM7300099_1W_barcodes.tsv.gz"
# [5] "GSM7300099_1W_features.tsv.gz" "GSM7300099_1W_matrix.mtx.gz" "GSM7300100_barcodes.tsv.gz" "GSM7300100_features.tsv.gz"
# [9] "GSM7300100_matrix.mtx.gz"
## 整理文件夹
library(stringr)
# 列出所有文件
files <- list.files("GSE231755_RAW/",full.names = T)
files
# 遍历文件并移动到对应的样本文件夹
for (file in files) {
# 提取样本名
#file <- files[1]
sample_name <- gsub("_barcodes.tsv.gz|_features.tsv.gz|_matrix.mtx.gz","", basename(file))
# 创建样本文件夹(如果不存在)
sample_folder <- file.path("GSE231755_RAW/", sample_name)
if (!dir.exists(sample_folder)) {
dir.create(sample_folder, showWarnings = FALSE)
}
# 移动文件到对应的样本文件夹
target_file <- file.path(sample_folder, gsub(paste0(sample_name,"_"),"", basename(file)) )
file.rename(file, target_file)
}
library(fs)
dir_tree("GSE231755_RAW/")
运行完后,得到的目录结构如下:
这就是标准的格式啦!
使用seurat v5版本,读取并合并:
# 方式一:标准文件夹
###### step1: 导入数据 ######
samples <- list.dirs("GSE231755_RAW/", recursive = F, full.names = F)
samples
scRNAlist <- lapply(samples, function(pro){
#pro <- samples[1]
print(pro)
folder <- file.path("GSE231755_RAW//", pro)
folder
counts <- Read10X(folder, gene.column = 2)
sce <- CreateSeuratObject(counts, project=pro, min.cells = 3)
return(sce)
})
names(scRNAlist) <- samples
scRNAlist
# merge
sce.all <- merge(scRNAlist[[1]], y=scRNAlist[-1], add.cell.ids=samples)
sce.all <- JoinLayers(sce.all) # seurat v5
sce.all
# 查看特征
as.data.frame(sce.all@assays$RNA$counts[1:10, 1:2])
head(sce.all@meta.data, 10)
table(sce.all$orig.ident)
library(qs)
qsave(sce.all, file="GSE231755/sce.all.qs")
结果如下:
是不是很简单,你学会了吗?