标准10X数据读取
每个样本文件包括三个文件:
barcodes.tsv:细胞标记条码
features.tsv:基因信息
matrix.mtx:基因表达量信息
通过lapply()用Read10X( file.path(dir,pro)依次读入样本文件,样本文件夹会存入Seurat对象构建orig.ident
#读入存放所有样本文件夹的文件夹
dir="./filtered_feature_bc_matrix"
samples=list.files( dir )
samples
sceList = lapply(samples,function(pro){
print(pro)
counts = Read10X( file.path(dir,pro))
return(counts)
})
#为列名(barcodes)加上样本名
for (i in 1:length(sceList)) {
col<-colnames(sceList[[i]])
colnames(sceList[[i]])<-paste0(samples[i],"_",col)
}
#构建Seurat对象
merge <- do.call(cbind,sceList)
sce =CreateSeuratObject(counts = merge ,
min.cells = 5,
min.features = 300 )#常用参数:min.cells为组织中分离的最少细胞数,min.features为一个细胞中测出的最少的基因数量
原数据格式
以GSE188545数据集为例,下载的每个GSM数据有三个文件,但命名并不规范,
大概像这样:
GSM5685287_AD02MTG_barcodes.tsv.gz
GSM5685287_AD02MTG_genes.tsv.gz
GSM5685287_AD02MTG_matrix.mtx.gz
GSM5685288_AD12MTG_barcodes.tsv.gz
GSM5685288_AD12MTG_genes.tsv.gz
GSM5685288_AD12MTG_matrix.mtx.gz
修改思路
1.创建每个GSM数据的文件夹
2.将每个GSM对应的三个文件移入对应文件夹
3.为每个文件夹的文件修改为标准名字
4.需要的数据:创建需要的正则表达式(用于转移文件),文件路径/改名需替代字符(用于文件改名)
全程for循环解决
getwd()
# setwd("..")
setwd("./GSE188545_RAW")# 需要改动处1
# 1.创建样本子文件夹
x<-paste0("GSM56852",c(87:98))# 需要改动处2
l<-length(x)
for(i in 1:l){
dir.create(x[i])
}
# 2.创建需要的正则表达式(用于转移文件),文件路径/改名需替代字符(用于文件改名)
v<-c()
y<-c()
d<-c()
t<-c("_AD02MTG_","_AD12MTG_","_AD30MTG_","_AD04MTG_","_AD16MTG_","_AD17MTG_","_HC14MTG_",
"_HC19MTG_","_HC35MTG_","_HC03MTG_","_HC07MTG_","_HC37MTG_")# 改动处3
for(i in 1:l){
y[i]<-paste0("D:/sigle/GSE188545/GSE188545_RAW/",x[i])# 改动处4
v[i]<-paste0(x[i],".*.gz$")
v[i]<-paste0("^",v[i])
d[i]<-paste0(x[i],t[i])
}
v
y
d
dir<-getwd()
# 3.转移文件
for (i in 1:l) {
list.files(getwd(),pattern =v[i],full.names = TRUE) |> purrr::map(\(x) file.copy(x,to = y[i]))
list.files(getwd(),pattern =v[i],full.names = TRUE) |> purrr::map(file.remove)
}
# 4.文件改名
for(i in 1:l){
setwd(dir)
print(y[i])
# 不知什么缘故,循环时以下两条命令如果只运行一次则无反应
folder<-setwd(y[i])
files<-list.files(folder)
folder<-setwd(y[i])
files<-list.files(folder)
for (f in files){
print(d[i])
newname<-sub(d[i],'',f) #将原文件中的字符"GSM5685288_AD02MTG_",替换为空
newname<-sub('genes','features',f)# 改动处5,有的数据集features命名不规范
file.rename(f,newname)
}
}
getwd()
setwd("..")
getwd()